使用UIViewController作为UITableView的tableHeaderView

5
我的问题主要涉及架构。我使用 UITableViewController 来显示一系列内容,这很常见。然而,tableHeaderView 包含了大量功能。有几个点击目标,它会动画显示,并根据用户交互更改显示。目前,我有一个自定义子类的 UIView 处理大部分的显示逻辑,并通过委托协议将点击事件传递回 UITableViewController 进行处理执行。
随着越来越多的功能被添加到 tableHeaderView 中,我感觉我的 UITableViewController 变得有点杂乱和冗长。因此,我想知道是否有意义创建一个子类的 UIViewContoller 并将其 view 设置为我的 UITableViewControllertableHeaderView?如果这样做,我可以将关注点分离开,几乎所有逻辑都可以放在我的新 `UIViewController` 中。但我猜我仍然需要通过一个委托在两个视图控制器之间进行通信。
从架构的角度来看,这样做有意义吗?还是应该继续使用现有的 UITableViewController 处理所有逻辑?
**编辑**
例如,当放置在我的 UITableViewController 中时,是否有意义?
- (void)addHeader
{
    myCustomHeaderViewController *hvc = [[myCustomHeaderViewController alloc] init];
    //Assume the view for hvc is set up w/re to sizing, etc.
    self.tableView.tableHeaderView = hvc.view
}
1个回答

1

是的,你可以这样做,在iOS5中,你有容器视图控制器,因此在一个视图控制器中,你可以添加多个子视图控制器,它们将一起工作。

你可以像这样将你的标题视图作为一个UIViewController,将你的表格视图作为一个UITableViewController分别添加到不同的视图控制器中:

- (void) addViewController: (UIViewController*)content;
{
   [self addChildViewController:content];                 
   content.view.frame = [self frameForController];
   [self.view addSubview:self.currentClientView];
}

在这里,您可以找到如何使用它们的指南:

创建自定义容器视图控制器


谢谢您的回复。我不确定我完全理解了。考虑到我刚刚发布的示例代码,是否仍需要视图控制器容器?假设我的UITableViewController在这种情况下是“主控制器”。 - natenash203
我明白了。这会产生任何性能上的问题吗?通过整体创建表格,然后使用主 UIScrollViewController 手动滚动浏览单元格,是否会错过 UITableViewController 的单元格排队功能?看起来 UIScrollViewController 的框架会相当大,而 UITableViewController 则有一个较小的框架,并将排队的单元格显示出来。如果这是一个无知的问题,请原谅。 - natenash203
那么您是建议我使用视图控制器容器,但将我的UITableViewController作为主控制器吗? - natenash203
这可能是一种方法,使用addChild将标题的视图控制器添加到主视图控制器中,然后将视图添加到标题。 - Antonio MG
嗨,使用UITableViewController作为“容器”,视图控制器的包含是否有效? - Vik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接