0

我试图在应用程序 didFinishLaunchingWithOptions:方法中获取对我的detailViewController的引用。但在这里我面临一个问题。

我的下一个 Views 结构是storyBoard(适用于iPad):

UISplitViewController --> UINavigationController --> UITableViewController --> detailViewController

我在UITableViewControllerCelldetailViewController之间创建了带有“ 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的引用,而不是可接受的 DetailViewControllernavigationController.viewControllers 计数为 1 ,但应该有 2(我认为是这样)。

我希望能得到你的帮助。

4

1 回答 1

0

由于您创建了带有推送样式的 segue,因此只有在您点击表格视图单元格后才会加载 detailViewController。它不会被加载到 appdidFinishLaunchingWithOptions方法上。

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

@property (nonatomic, strong) UIViewController *detailViewController;

然后在您的应用程序中的 didFinishLaunchingWithOptions 方法中,您可以访问该属性:

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

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

[self.navigationController pushViewController:self.detailViewController animated:YES];
于 2013-05-19T10:51:01.393 回答