UINavigation推新的根控制器(UINavigation pushing a new roo

2019-08-02 07:48发布

我想一个新的根控制器推送到导航堆栈,但使用一个侧面显示菜单。

我的应用程序委托有以下几点:

    welcomeViewController = [[MyWelcomeViewController  alloc] initWithNibName:@"MyWelcomeViewController" bundle:nil];
navController = [[UINavigationController alloc] initWithRootViewController:welcomeViewController];
navController.navigationBarHidden = YES;

// Then we setup the reveal side view controller with the root view controller as the navigation controller
self.revealSideViewController = [[PPRevealSideViewController alloc] initWithRootViewController:navController];
[self.revealSideViewController setDirectionsToShowBounce:PPRevealSideDirectionNone];
[self.revealSideViewController setPanInteractionsWhenClosed:PPRevealSideInteractionContentView | PPRevealSideInteractionNavigationBar];

// Then we make the window root view controller the reveal side view controller
self.window.rootViewController = self.revealSideViewController;

一旦显示欢迎视图控制器,在用户登录,一旦在下面的过程再次记录在应用委托运行。

self.navController.navigationBarHidden = NO;
[self.navController setTitle:@"Home"];
[self.navController pushViewController:homeViewController animated:NO];

然后我具有侧视控制器设置其与定制单元设置一个表视图。

当选择的行我需要一个新的根控制器推到导航控制器。 我通过使用所选单元格的表格查看以下尝试。

MyAccountViewController *accountViewController = [[MyAccountViewController alloc] init];
[self.navigationController setViewControllers:[NSArray arrayWithObject:accountViewController] animated:NO];

不幸的是,这并不做任何事情。 如果我的代码添加到应用程序代理,然后调用从表视图控制器的方法,那么它的工作原理,但不是从表视图本身.m文件。 添加日志,我可以看到上面的运行,只是没有做任何事情。

我不确定,如果我需要做任何事情上与上述不同。 例如,完全弹出当前显示的视图,则所有重复创建导航控制器和PPRevealSideViewController。 如果我应该,我不知道该如何弹出所有当前视图,然后从AppDelegate中推新的窗口,没有。

我不希望这个在App代表的原因是因为它是解决这个不正确的方法,然后我就需要为每个新的根控制器我想从菜单中按一个单独的方法,以便与App代表将成为很大。

Answer 1:

检查UINavigationController.h:

@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,retain) UINavigationController *navigationController; // If this view controller has been pushed onto a navigation controller, return it.

这意味着,当你做myViewController.navigationController你要么获得nil如果myViewController没有推到任何navController或navController参考myViewController推入。

据我了解你的tableViewController不压入堆栈navController,这意味着你不能得到navController tableViewController.navigationController 。 相反,你需要使用anyViewControllerInTheStack.navigationController或者如果navController是rootViewController你的keyWindow ,由

((UINavigationController*)[[UIApplication sharedApplication] keyWindow].rootViewController)


Answer 2:

加入这样的事情你AppDelegate.h:

#define XAppDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])

现在,您可以从项目中的任何.m文件访问AppDelegate中的任何伊娃。

 MyAccountViewController *accountViewController = [[MyAccountViewController alloc] init];
 [XAppDelegate.navController pushViewController:accountViewController animated:NO];

请务必添加正确的进口。 还有一两件事:这是很好的从你的navcontroller弹出登录窗口一旦你完成登录。

希望这可以帮助。



文章来源: UINavigation pushing a new root controller