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

时间:2011-01-26 20:08:53

标签: xcode uisplitviewcontroller ipad

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

我在xcode中使用基于Split View的基本应用程序,但已对其进行了编辑,以便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 个答案:

答案 0 :(得分:5)

你的rootViewController可以访问detailViewController,因为它有一个referance。如果你将一个新控制器推到导航堆栈上,那么会自动了解DetailViewController。

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

您通常会在创建时将其设置为:

 - (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];
    }