I have a rather bizarre problem. I have a game made in sprite kit with 2 view controllers, one for the game, one for the menu. when the game ends, the view controller segues back to the menu and closes the game window, this works fine the first time, but if you then go to play another game, lose and come back, for some reason you cannot interact with the menu view controller in any way. Here is my code, running from the SKScene:
[self.view.window.contentViewController performSegueWithIdentifier:#"endGame" sender:self];
[self.view.window performClose:nil]; //close the window
As I said before, it works the first time, but not the second, it displays the menu but you cant interact with it.
So I worked out what the issue is. When you create a new view controller in the storyboard, it also creates a new window controller. I was using 2 window controllers in my app, by removing 1 of these and linking the menu window to the window controller for the game scene it fixed the problem.
Related
I have 2 viewcontrollers in my storyboard. This is for my game. The first view controller is the menu (with play button) when you click the play button it modals (by modal i mean when you hold down the control key and click the button and drag it to the view) to the 2nd viewcontroller (Which is my game scene). That works perfectly. My problem is I have put a button in my 2nd viewcontroller which is a back button. I modaled it to the menu (first viewcontroller). That works perfectly to , but when you click play again for the second time after having pressed the back button once from the game, once you are playing the game everything starts glitching. I really need your help?
I think i understand what you are doing.
Try using a UINavigationController instead of hard linking buttons to views, that way you get a stack with your views where you can push and pop whatever you want.
Have a look at this
In my app, I would like a loading screen which has a start button, and when the user presses the start button, it displays my the actual parts of my application.
I can't use a Default.png because i need the functionality of the start button. And since my rootViewController is a tabBar, I can't simply add my screen as a subview, because then my loading screen just appears in each individual tab.
Any ideas?
You could create a new view controller and set that view controller as the root view controller. In the new view controller, create a UIImageView with the loading image and a UIButton where you want it. Then you could go in the storyboards and make the button transition to the "actual parts of [your] application".
Hope this helps!
There are several ways to do it. Assuming your app spends very little time in the Start Screen, I would implement it as a modal view controller that I display over the root tab view.
After you load your root tab bar view for the first time, present the Start Screen view controller without animations.
[tabBarViewController presentViewController:startViewController animated:NO completion:NULL];
If you do this early enough (e.g., in your app delegate's didFinishLaunching: method), the start screen will be the first thing the user sees. It's hard to say exactly where you should insert this code since you haven't said whether you are using storyboards or a default nib or loading a view manually etc.
When the button is pressed, simply dismiss the startViewController.
I've set up a really simple project using storyboards including two views as shown here: http://i.stack.imgur.com/iRx21.png. The navigation can be done by either selecting a cell in the custom table view or hitting the back button labelled with "<<". Everything works fine except the following:
when I switch between the views, every time an instantiation happens. The profiling shows an increasing number of view objects. I would like to keep only one of each view and instantiation should be happen only once. What am I doing wrong? (I'm using ARC.)
Thanks in advance!
You should not link your back button to the parent view controller. This is what causes the new instantiation.
The way to go is to embed the table view into UINavigationController (in IB, choose Editor -> Imbed In -> Navigation Controller. Then change your segue to a Push segue. You can of course hide the navigation bar etc. to make things look exactly as you like. Then, link the back button to the controller with an IBAction and in the handler do a simple
[self.navigationController popViewControllerAnimated:YES];
This would be the appropriate logic of what you are doing. Of course, you can also push the web view modally and then handle the button click with
[self dismissModalViewControllerAnimated:YES];
iPhone/iPad dev newb here...
I am using MonoTouch to create a universal iPad/iPhone storyboard app. In the primary view controller (RootViewController) the default auto-generated behavior is a table with a single cell "Detail" in it, which hardwires you to the next destination (DetailViewController).
I'd like to change this RootViewController to instead show a login control I've made extending UIViewController (LoginView). I have had some success putting the LoginView inside the RootViewController, but can't figure out how to make it 'segue' to DetailViewController. And upon watching how the iPad app works, where there is no segue (that I can see) between the two, am I going about this wrong?
To summarize: How do I enhance this storyboard app with a preceding login screen, reusing its contents/xib between the iPad and iPhone variant?
Apologies if this is a bit unclear and muddled.......
I have not tried a storyboard app in Monotouch yet, but I did spend a lot of time working out the best approach for a login screen for my application. What I ended up doing, which could work in your situation as well, is presenting the login screen as a Modal view. Once the user has successfully logged in, we then push the next appropriate view.
So if you are automatically pushed into the detail view by the storyboard viewcontroller, you could display the login dialog as a modal dialog from the detail view's DidLoad or DidAppear methods.
I have a fairly hefty project, where I am loading a few view controllers, one after the other. First, a splash screen, followed by a menu system, and when the user clicks on the menu it goes through to an article view controller.
Putting all these in with shouldAutorotate... set to YES for all rotations, this works fine. However, I have a menu bar I need to slide down over the top when a tap gesture has been recognised. I have one for the main menu, and one for the article view.
If I put one of these in, it still auto-rotates fine. However, as soon as I put the next one in, the auto-rotate stops working. I've tried putting the menu bars in the app delegate, as well as nesting them inside the menu/article view controllers. The Menu Bar view controller also has shouldAutorotate... set to YES. In fact, every single view controller in the project (all 7 of them) have it set to YES. And yet, when I add my second Menu bar controller, it stops auto-rotating. It doesn't even trigger the "shouldAutorotate" method to ask it.
The code is way too large to post here, but if you'd like to see anything in particular then just ask. I'm totally stumped! I'm about to pull the menu bars out of their view controller and code them up in each of the view controllers individually. This will be a hideous amount of code duplication, but I can't think of any other way round it!
Any ideas? Thanks!
The answer appears to be... Don't put view controllers within other view controllers! One view controller = one screen, seems to be the rule. I have a lot to learn!