我已经设置了一个UINavigation控制器,它使用AppDelegate作为主要联系点。
我有不同的运行方法,例如presentHomeViewController,presentLoginViewController,它将不同的视图控制器推送到导航控制器。
App Delegate - didFinishLaunching
welcomeViewController = [[MyWelcomeViewController alloc] initWithNibName:@"MyWelcomeViewController" bundle:nil];
navController = [[UINavigationController alloc] initWithRootViewController:welcomeViewController];
navController.navigationBarHidden = YES;
self.revealSideViewController = [[PPRevealSideViewController alloc] initWithRootViewController:navController];
[self.revealSideViewController setDirectionsToShowBounce:PPRevealSideDirectionNone];
[self.revealSideViewController setPanInteractionsWhenClosed:PPRevealSideInteractionContentView | PPRevealSideInteractionNavigationBar];
self.window.rootViewController = self.revealSideViewController;
这是正确的过程吗?
- (void)presentHomeViewController {
// We start by dismissing the ModalViewConrtoller which is LoginViewController from the welcomeview
[self.welcomeViewController dismissModalViewControllerAnimated:YES];
// Check if the home view controller already exists if not create one
if (!self.homeViewController) {
NSLog(@"presentHomeViewController- Creating the Home View controller");
homeViewController = [[MyHomeViewController alloc] initWithNibName:@"MyHomeViewController" bundle:nil];
}
// Push the homeViewController onto the navController
NSLog(@"presentHomeViewController");
self.navController.navigationBarHidden = NO;
[self.navController setTitle:@"Home"];
[self.navController pushViewController:homeViewController animated:NO];
如果我然后将以下内容添加到其他类:
[self.navigationController pushViewController:accountViewController animated:NO];
如果我一直在控制AppDelegate中的所有移动,或者是否有更好的方法来解决这个问题,那么没有任何视图被推入堆栈?
答案 0 :(得分:0)
修改强>
感谢您发布您的代码。因此,为了首先解决您的最终问题,我不建议您从应用代表控制导航堆栈。您应该从作为导航控制器子级的视图控制器控制堆栈。
为此,请记住视图控制器的层次结构:UINavigationController
继承自UIViewController
,UIViewController
具有为您在导航布局中看到的所有内容定义的属性,例如导航项目和标题。更重要的是,它还具有其父视图控制器,呈现它的视图控制器及其导航控制器的属性。因此,考虑到层次结构,您的应用程序委托应该只实例化导航控制器的根VC和导航控制器本身,然后设置导航控制器的根VC。
从那里开始,你应该从VC自己推动并弹出其他风险投资。请记住,每个VC都有一个属性,该属性会自动设置为指向它所属的导航控制器。这就是[self.navigationController pushViewController:]
有效的原因。例如,如果我有一个导航控制器,其根VC是UITableViewController
,并且点击表视图中的一个项目将一个新VC压入堆栈,我会从VC表中推送该VC而不是来自导航控制器类或应用程序委托。
很抱歉,如果这令人困惑。如果需要澄清,请告诉我,我会尽力而为。否则,希望能让你走上正轨。