如何从推送的控制器获取RootViewController?

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

所以,我从RootViewController中推送一个视图控制器,如下所示:

[self.navigationController pushViewController:anotherViewController animated:YES];

但是,从anotherViewController现在开始,我想再次访问RootViewController。

我尝试着

//(现在在另一个ViewController中)
/// RootViewController * root =(RootViewController *)self.parentViewController; //不
// 呃
RootViewController * root =(RootViewController *)[self.navigationController.viewControllers objectAtIndex:0]; // YES !! 有用

我不确定为什么这会起作用,我不确定它是否是最好的方式。有人可以评论一种更好的方式来从你推入RootViewController的navigationController的控制器获取RootViewController,以及我做的方式是否可靠?

咕噜sasa咕噜sasa提问于
名字真难选a梦想成为一个有趣的人回答于

使用UINavigationController 的viewControllers属性。示例代码:

// Inside another ViewController
NSArray *viewControllers = self.navigationController.viewControllers;
UIViewController *rootViewController = [viewControllers objectAtIndex:viewControllers.count - 2];

这是获得“后退”视图控制器的标准方式。原因很objectAtIndex:0有效,因为你试图访问的视图控制器也是根视图控制器,如果你在导航中更深入,后视图不会和根视图相同。

心愿回答于

Swift版本:

var rootViewController = self.navigationController?.viewControllers.first

ObjectiveC版本:

UIViewController *rootViewController = [self.navigationController.viewControllers firstObject];

self是UINavigationController中嵌入的UIViewController的一个实例。

扫码关注云+社区