【问题标题】:How to swap out masterviews in a UISplitviewcontroller?如何换出 UISplitviewcontroller 中的主视图?
【发布时间】:2012-10-16 17:33:51
【问题描述】:

基本上,我有两个用于 splitViewController 的 MasterViewController,但我一次只能使用其中一个来运行应用程序。两个 MasterViewController 都使用相同的 DetailViewController。 当用户按下 tabbarbutton 时,第二个 masterViewController 被按下。

splitViewController 在 AppDelegate 中是这样直接声明的

MasterViewControllerOne *mvc1 = [[MasterViewControllerOne alloc] initWithNibName:@"MasterViewControllerOne_iPad" bundle:nil];
UINavigationController *masterOneNavigationController = [[UINavigationController alloc] initWithRootViewController:mvc1];

DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:dvc];

self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.delegate = detailViewController;
self.splitViewController.viewControllers = @[masterOneNavigationController, detailNavigationController];
self.window.rootViewController = self.splitViewController;

在运行时,我希望 MasterViewControllerTwo 与 MasterViewControllerOne 交换

推送新视图控制器的操作:

MasterViewControllerTwo*mvc2=[[MasterViewControllerTwo alloc]initWithNibName:@"MasterViewControllerTwo_iPad" bundle:nil];
[self.navigationController pushViewController:mvc2 animated:YES];

这会在 mvc1 之上交换 mvc2。但是,在 mvc2 中点击 tableview 的行不会激活 DetailViewController。

要激活 DetailView(与 mvc1 和 mvc2 相同),我执行以下操作

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    Item *theItem =[[self.items objectAtIndex:[indexPath section]]objectAtIndex:[indexPath row]];
    [self.detailViewController setLabelsForItems:theItem];
}

只要在 appdelegate 中将 MasterViewController 定义为 splitviewcontrollers 数组的成员,就可以很好地工作。那么为什么mvc2在栈顶时不激活DetailViewController呢?

【问题讨论】:

    标签: ios uisplitviewcontroller master-detail


    【解决方案1】:

    在 mvc2 中点击 tableview 的行不会激活 DetailViewController

    嗯,这不会神奇地自行发生。您可以在选择第二个表视图的行时响应。你没有展示任何代码来做这件事,所以假设你没有。

    换句话说,拆分视图控制器除了包含主视图和细节之外,它本身什么也不做。主人和细节之间的沟通取决于你。该模板向您展示了您需要做的事情。

    【讨论】:

    • 代码在MasterViewControllerTwo里面,和MasterViewControllerOne的代码一模一样
    • 是的,但是显示代码。除非你愿意说出“它”是什么,否则没有人能真正告诉你它有什么问题。当然,人们可能只是猜测你可能做错了什么,但为什么要猜测呢?作为问题的一部分,展示你在做什么。要具体,不要含糊。
    • 你是绝对正确的。我现在添加了用于在使用 tableView:didSelectRowAtIndexPath 方法时激活 DetailViewController 的代码。
    • 你添加了日志吗?确保实际调用了此方法。如果是的话,我敢打赌,self.detailViewController 是 nil。
    • 你说得对。欠你钱和甜甜圈,self.detailViewController 为零。更多的研究让我走上了协议的轨道:SubstitutableDetailViewController。你怎么看?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多