UINavigation推送新的根控制器
我正在尝试将新的根控制器推送到导航堆栈,但使用侧面显示菜单。
我的应用代表具有以下内容:
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;
一旦显示欢迎视图控制器,用户就会登录。登录后,以下过程将再次从App Delegate运行。
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];
不幸的是,这没有任何作用。 如果我将代码添加到App Delegate然后从表视图控制器调用该方法,那么它可以工作,但不是来自表视图本身的.m文件。 添加日志我可以看到上面运行,只是没有做任何事情。
我不确定我是否需要在上面做任何不同的事情。 例如,完全弹出当前显示的视图,然后重新创建导航控制器和PPRevealSideViewController。 如果我应该,我不确定如何弹出所有当前视图然后将新推送到窗口,而不是从AppDelegate。
我不想在App Delegate中使用它的原因是因为它是不正确的方法来处理它,然后我需要一个单独的方法为我想从菜单推送的每个新的根控制器,所以App Delegate将成为很大。
检查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
时,如果myViewController
没有被推送到任何navController或者navController引用myViewController
被推入,你将获得nil
。
据我所知,你的tableViewController
没有被推入navController堆栈,这意味着你无法使用tableViewController.navigationController
获取navController。 相反,你需要使用anyViewControllerInTheStack.navigationController
或者如果navController是你的keyWindow
,
((UINavigationController*)[[UIApplication sharedApplication] keyWindow].rootViewController)
将这样的内容添加到AppDelegate.h中:
#define XAppDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])
现在,您可以从项目中的任何.m文件访问任何iVar的AppDelegate。
MyAccountViewController *accountViewController = [[MyAccountViewController alloc] init]; [XAppDelegate.navController pushViewController:accountViewController animated:NO];
确保添加正确的导入。 还有一件事:一旦完成登录,从导航控制器弹出登录窗口是件好事。
希望这可以帮助。
- 在一个UILabel中,是否有可能强制一行不在某个地方中断
- 如何检索“FBSDKGraphRequest”的结果以便在外面使用?
- 如果将UICollectionViewCell子类的contentView.translatesAutoResizingMaskToConstraints设置为“false”?
- 如何在iOS中的UITableViewCell中播放video(自动播放)
- 在Swift SpriteKit场景中显示Admob插页式广告
- 如何检测删除buttonUItableviewcell是否隐藏?
- Xcode 5您的二进制文件在validation时未针对iPhone 5进行优化
- iTunes连接:无法完成此操作。 再试一次。 (-22421)
- 适用于iOS的Google Maps API myLocationEnabled无效