如何从 rootViewController 中的多级导航更新 detailViewController.detailItem

Posted

技术标签:

【中文标题】如何从 rootViewController 中的多级导航更新 detailViewController.detailItem【英文标题】:How to update detailViewController.detailItem from multi-level nav in rootViewController 【发布时间】:2011-01-26 20:08:52 【问题描述】:

这是我的第一篇文章,所以请轻点。

我在 xcode 中使用基本的基于拆分视图的应用程序,但已对其进行了编辑,以便 rootViewController 不会简单地更新 detailViewController,而是将新的 UITableViewController (taskViewController) 推送到导航堆栈上。

我的问题是,当我现在从我的 taskViewController 调用以下命令时,什么也没有发生:

detailViewController.detailItem = [NSString stringWithFormat:@"Row %d", indexPath.row];

如果我从 rootViewController 调用它,而不是将新的 UITableView 推送到堆栈上,它可以工作。

这是我在选择单元格时来自 rootViewController 的代码:

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    TaskViewController *taskViewController = [[TaskViewController alloc] init];

    taskViewController.title = [NSString stringWithFormat:@"Unit %d",indexPath.row];

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

    [taskViewController release];

我在这里做错了吗?我是否在 UISplitViewController 的 rootViewController 中正确使用了导航控制器?

【问题讨论】:

【参考方案1】:

您的 rootViewController 可以访问 detailViewController,因为它具有对它的引用。如果您将新控制器推送到导航堆栈,那么它不会自动了解 DetailViewController。

你有NSLog'd detailViewController在你的taskVC中看看它是否有一个指针?

您通常会在创建它时这样设置:

 - (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    
        TaskViewController *taskViewController = [[TaskViewController alloc] init];

        taskViewController.title = [NSString stringWithFormat:@"Unit %d",indexPath.row];

        taskViewController.detailViewController = self.detailViewController;

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

        [taskViewController release];
    

【讨论】:

太棒了!我只是假设 UISplitViewController 负责所有这些。谢谢 它确实做到了,就基本的根和详细的 VC 而言,但在那之后你自己的 dw,当你开始时,这是一个常见的错误。不过我应该警告你,splitViewControllers 也有其他问题,不过我会让你自己完成这个旅程。 NSLog 是你的朋友。

以上是关于如何从 rootViewController 中的多级导航更新 detailViewController.detailItem的主要内容,如果未能解决你的问题,请参考以下文章

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

如何将 RootViewController 设置为 SplitViewController 中的分组表

从 rootViewController 设置 UILabel 文本

Swift - 当应用程序进入后台状态时,从 AppDelegate 更新 RootViewController 中的值

如果 UITabbarcontroller 不是 rootviewcontroller,如何从 Appdelegate 为 UIBarButtonItem 设置徽章(无论何时推送通知)?

没有从 AppDelegate 设置 RootViewController?