UIScrollViews中的UIViewControllers:我不正确理解的是什么?

时间:2011-08-19 01:58:45

标签: ios4 xcode4 uiviewcontroller uiscrollview addsubview

我将通过陈述我在我的应用中尝试做的事情来开始我的问题:

我正在尝试构建一个文档“选择器”屏幕,类似于iPad上的Pages或Numbers,看起来像这样:

enter image description here

我想要一个UIScrollView我放下子视图;这些子视图可能对它们有控制,例如Pages / Numbers中的日期/名称“排序”分段控件,或者它们可能是文档的图像。子视图显示的内容并不重要 - 我希望子视图是支持UIViewControllers的视图。这就是我的困惑开始的地方。

请参阅,我最初尝试使用UITableView构建文档选择器屏幕。出于各种原因,超出了本问题的范围,这没有成功。作为这项工作的一部分,我根据this tutorial (Creating a custom UITableViewCell in iOS 4)创建了UITableViewCell子类(和附带的XIB)。我心想,这很棒 - 我有一些观点,我可以在UITableView中展示,并且有办法从这些观点中获取事件,例如这样(sortTypeChanged响应一个我的日期/名称分段控件中的选择更改:

@interface DocSortViewController : UITableViewCell {
}

-(IBAction)sortTypeChanged:(id)sender;
@end

这一切都很好 - 直到我意识到UITableView不会得到我想要的东西。所以我放弃了它,转而支持UIScrollVIew。然而,这是我目前的知识让我失望的地方。自定义UITableViewCells“使用视图控制器/ XIB视图”范例似乎不适用于UIScrollViews

我无法弄清楚如何创建一个单独的视图控制器和附带的XIB,我可以加载并显示在UIScrollView中。尝试通过UINib.instantiateWithOwner加载XIB并将视图控制器的view属性添加为子视图崩溃。我不确定为什么。

但令我担忧的是,我似乎从根本上误解了视图控制器/视图的工作方式。特别是与UIScrollViews结合使用时。

我错过了什么?有没有人试图做类似的事情?有没有推荐的最佳做法?如果您不应该将视图控制器/ XIB加载到UIScrollViews,那么您应该做什么呢?您如何从UIScrollView中的子视图控件中获取事件?

编辑:我应该补充一点,我的问题是我正在通过WPF的镜头来看待这一点,在这里,使用MVVM模式,你可以通过编写构建一个完整的视图它具有较小的视图,每个视图都有自己的支持视图模型。在iOS中复制它是否现实?或者它是不是真的推荐?

1 个答案:

答案 0 :(得分:2)

在iOS中,“视图控制器”是一个特殊实体,通常控制整个屏幕的子视图(iPad上的UISplitViewController和UIPopoverController是例外)。您链接的教程告诉您为UITableViewCells创建视图控制器xib是错误的。你应该做的是为你的UITableViewCell子类创建一个xib,不涉及任何视图控制器。乍一看,其余部分似乎或多或少都是正确的。

你可以用UIScrollView做同样的事情,除了你没有方便的tableView:cellForRowAtIndexPath:方法来告诉你何时从xib创建子视图。如果没有你发布的实际错误,当它“崩溃”时我会猜到,但我猜你提供的任何对象instantiateWithOwner:options:的所有者与nib所期望的不匹配。作为所有者传递的对象必须是所有者在nib中指定所有类的实例。