无法从UINavigationController访问detailViewController

时间:2013-05-18 00:00:26

标签: uinavigationcontroller storyboard push

我正在尝试在 应用程序didFinishLaunchingWithOptions: 方法中引用我的 detailViewController 。但在这里我遇到了一个问题。

我的下一个视图结构是 storyBoard (对于 iPad ):

UISplitViewController - > UINavigationController - > UITableViewController - >的 detailViewController

我在 UITableViewControllerCell detailViewController

之间创建了带有“ push ”样式的segue

屏幕截图:http://picturepush.com/public/13071076

我正试图以这种方式引用 detailViewController

    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;

    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    DetailViewController *detailViewController = [navigationController.viewControllers lastObject];

但结果我参考了我的 UITableViewController ,而不是可接受的 的 DetailViewController 即可。 navigationController.viewControllers计数是1,但应该有2(我想是这样)。

我希望得到你的帮助。

1 个答案:

答案 0 :(得分:0)

由于您使用 push 样式创建了segue,因此只有在点击表格视图单元格后才会加载detailViewController。它不会加载到应用didFinishLaunchingWithOptions方法。

我建议你尝试将detailViewController作为表视图控制器中的属性。

@property (nonatomic, strong) UIViewController *detailViewController;

然后在您的app didFinishLaunchingWithOptions方法中,您可以访问该属性:

UITableViewController *tableViewController = [navigationController.viewControllers lastObject];
DetailViewController *detailViewController = tableViewController.detailViewController;

但是你需要避免使用执行segue函数,并在需要时使用通常的pushViewController方法推送详细视图控制器。

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