2

我将通过说明我在我的应用程序中尝试做的事情来开始我的问题:

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

在此处输入图像描述

我想要一个UIScrollView可以放入子视图的;这些子视图上可能有控件,例如 Pages/Numbers 中的日期/名称“排序”分段控件,或者它们可能是文档的图像。子视图显示什么并不重要 - 我希望子视图成为带有 backing 的视图UIViewControllers。这就是我的困惑开始的地方。

看,我最初尝试使用UITableView. 由于超出此问题范围的各种原因,这没有解决。作为这项工作的一部分,我UITableViewCell按照本教程(在 iOS 4 中创建自定义 UITableViewCell)创建了子类(和随附的 XIB)。我心想,这太棒了 - 我有可以在 a 中显示的视图UITableView,并且有办法以这样的方式从这些视图中获取事件(sortTypeChanged响应我的 Date/Name 分段控件中的选择更改) :

@interface DocSortViewController : UITableViewCell {
}

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

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

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

不过,让我担心的是,我似乎从根本上误解了视图控制器/视图的工作方式。尤其是与UIScrollViews.

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

编辑:我应该补充一点,我的问题的一部分是我正在通过 WPF 的镜头来看待这个问题,在这种情况下,使用 MVVM 模式,您可以通过将较小的视图组合成一个完整的视图,每个视图都有自己的支持视图模型。在 iOS 中复制它是否现实?还是真的不推荐?

4

1 回答 1

2

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

你可以用 UIScrollView 做同样的事情,只是你没有一个方便的tableView:cellForRowAtIndexPath:方法来告诉你什么时候从 xib 创建子视图。如果没有你发布它“崩溃”时你得到的实际错误,我只能猜测,但我猜你作为所有者提供的任何对象instantiateWithOwner:options:都不符合 nib 的预期。作为所有者传递的对象必须是在 nib 中指定所有者的任何类的实例。

于 2011-08-22T16:43:55.397 回答