iOS:如何在SplitView模板中动态更改DetailView?

时间:2011-04-12 12:36:12

标签: objective-c ios uisplitviewcontroller

我有一个SplitView模板项目。 我想在用户选择RootViewController中的项目时更改DetailView。

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

我试过了:

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

顺便说一下,我不明白为什么我需要第2行(..setView:..)?为什么分配detailViewController(第3行)是不够的? - 代码看起来很糟糕=(

但无论如何,这并不完全符合我的要求。除detailView之外的所有内容都会消失。就像我改变了主视图,而不仅仅是DetailViewController的

我想我应该在splitViewController中更改一些东西但是没有找到什么=(

感谢您的关注。

1 个答案:

答案 0 :(得分:18)

一周前我也有你的问题,我在这个论坛上也没什么帮助。我希望我能为你改变它。

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

您必须了解splitviewcontroller是什么来了解Apple正在做什么。将splitview控制器视为设备窗口中的容器。这个容器有2个隔间,左侧较薄,右侧较大。现在要改变任何一侧,你必须用另一个类似大小和性质的隔间替换这个隔间。你不能把一个不适合的隔间放在那里或做一些花哨的东西,因为它根本不适合。

在技术讲座中,在示例中找到以下代码。 splitview控制器有一个包含2个视图的数组,您可以更改此数组中的视图。因此,在这个数组中是2个视图,左边称为navigationcontroller,右边是detailviewcontroller。如果您分配并启动视图并将其添加到这两个视图中的任何一个,那么此视图将替换splitviewcontroller中的当前视图。

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

现在你的问题的第二部分 - 我认为是从左侧你希望能够总是能够选择一些东西并且能够改变右手......我是对的吗?

我已经阅读了三种不同的方法,并没有看到有人说一个比另一个更好。

  1. 设置通知 - 当您点击左侧的内容时,会向右侧发送通知。
  2. 当您从左侧的底部或根视图开始时,您将看到右侧的参考,如果您在左侧添加子视图等,则始终将参考传递到右侧。
  3. 我这样做的方法是在appdelegate或rootview委托中设置一个协议,然后在一个我想与右手边交谈的视图中,它使用这个协议,我的右侧实现了这个协议。这是我学到的最后一个,因为它是获取模态视图与其他视图对话的首选方法。
  4. 我不是专家所以我没有为上面3个选项中的每个选项添加代码,我建议你做一些谷歌搜索主题,你会看到例子。如果你真的被困在一个让我知道,我会尝试再次与谷歌找到我过去发现的例子。我认为最不复杂的是No.1。

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