2011-04-12 54 views
6

我有一个SplitView模板项目。 我想更改RootViewController中用户选择项目的DetailView。iOS:如何动态更改SplitView模板中的DetailView?

事实上,我不能只是改变那个视图内的东西(DetailView),就像它在模板中完成的那样(当你在创建项目时检查“使用核心数据存储”)。 我想在整个视图之间切换。

我已经试过了:

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 
[appDelegate.detailViewController setView:curretnDetailViewController.view]; 
appDelegate.detailViewController = currentDetailViewController; 

通过我不明白为什么我需要线#2的方式(..setView:..)?为什么分配detailViewController(第3行)是不够的? - 代码看起来可怕=(

但无论如何,当我想不完全可用,除了一切的DetailView消失就像我已经改变了主视图,而不仅仅是DetailViewController的

我想我应该改变一些东西。 splitViewController但没有发现什么=(

感谢您的关注。

回答

18

我也有你大约一个星期前的问题,我也得到了一些帮助在这个论坛上,我希望我可以改变你。

首先你知道苹果有一个多细节视图的例子吗?它在这里Apple Examples

你必须明白什么是一个splitviewcontroller是想知道苹果在做什么。将分割视图控制器视为设备窗口中的容器。这个容器有两个隔间,一个较薄的左手边,一个较大的右手边。现在要改变任何一边,你必须用另一个类似大小和性质的隔间来替换这个隔间。你不能在那里放置一个不适合的隔间,或者因为它不适合而做一些特殊的事情。

在技术讨论中,在示例中找到下面的代码。 splitview控制器有2个视图的数组,您可以更改此数组中的视图。因此在这个数组中有2个视图,左边是导航控制器,右边是detailviewcontroller。如果您分配并启动一个视图并将其添加到这两个视图中的任何一个,则此视图将替换splitviewcontroller中的当前视图。

NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil]; 
splitViewController.viewControllers = viewControllers; 

现在关于你的第二部分你的问题 - 我想这是从要能够随时都可以选择的东西,能够改变右侧左侧....我对吗?

我已经阅读了三种不同的方式来做到这一点,并没有看到任何人说一个比另一个更好。

  1. 设置了一个通知 - 当您点击左边的内容时,通知会被发送到右侧。
  2. 当您从左侧的底部或根视图开始时,您将有一个对右侧的引用,如果向左侧添加子视图等,则始终将引用传递给右侧。
  3. 我这样做的方法是在appdelegate或rootview委托中设置一个协议,然后在一个视图中,我想与右侧交谈它使用此协议,而我的右侧实现此协议。我学到了最后一个,因为它是获取模态视图与其他视图交谈的首选方法。

我不是专家,所以我没有为以上3种选择中的每一种添加代码,我建议您做一些关于主题的搜索功能,您将看到示例。如果你真的被困在一个让我知道,我会尝试再次找到谷歌过去发现的例子。我认为最简单的是No.1。

我希望这能让你朝着正确的方向前进。

+1

有没有可能你还有上面列出的第三种方法的例子? – JimmyP 2014-01-31 00:27:55