开发者

iPhone - how do I add a navigation controller to a view?

I currently have an application that does the the following:

S: Loads a view as a login screen to start with.

a: If login is successful I add a terms and conditions screen as a subview

b: If not successful I add a sign up form as a subview

F: Then I load the main part of my app on success of either of the a or b which is the part of the app where there is a navigation controller and a tab bar controller. This is set up in MainWindow.xib

S, a and b also have Nav bars but no navigation controlle开发者_如何转开发rs as I didn't think I would need navigation control on the login screens.

However it turns out I do, I want to be able to have back navigation from both a and b to the initial login screen.

I have tried several ways of doing this including trying the following answers:

How to add navigation controller in View Based Application in iPhone?

How do you properly set up a secondary view to support a navigation Controller on the iPhone?

how to add navigation controller programatically?

But none of them work for me, they display the new Navigation controller over the login screen and dont load the a or b screens.

I'm guessing this is because I am adding them as subviews to my loginView and this is not the correct way to do this? My code is as follows:

 if(self.tcSubViewController == nil){

        TCSubViewController *_tcSubViewController = [[TCSubViewController alloc] initWithNibName:@"T&CView" bundle:[NSBundle mainBundle]];

        self.tcSubViewController = _tcSubViewController;

        [_tcSubViewController release];

    }
 [self.view addSubview:[tcSubViewController view]];

I'm guessing there's a fundamental flaw in the way my Login flows? I should be able to completely remove the LoginView and then display the Terms and conditions view without having to add it as subview, shouldn't I?


You need to dismiss the navigation controller to go back to. To dismiss modal view:

1.Easy way: In your modal view in some method that you call to dismiss just add:

[self.navigationController dismissModalViewControllerAnimated:YES];

2.More complex way: Implement and delegate protocol on your modal view and make the view controller that presents the modal view the delegate of it. And in the delegate method dismiss the modal view. I do this way when I need to send data from modal view to the controller that present it.

Reference to this post


Navigation controller philosophy is that you add only navigationController.view as UIWindow subview and it wil manage the rest by itself. You only need to push/pop viewControllers and their corresponding views will be added/removed from screen automatically.

sample code from my current application:

HomeController *homeController = [[[HomeController alloc] init] autorelease];
self.controller = [[[UINavigationController alloc] initWithRootViewController:homeController] autorelease];
self.controller.navigationBarHidden = YES;
[self.window addSubview:self.controller.view];
[self.window makeKeyAndVisible];

and then to push next view you just add next controller:

[self.navigationController pushViewController:newController animated:YES];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜