【问题标题】:issue with tab bar view displaying a compound view选项卡栏视图显示复合视图的问题
【发布时间】:2010-04-19 10:35:42
【问题描述】:

我创建了一个标签栏应用程序,并将第一个标签设为表格。因此,我创建了一个 tableView 控制器,并将第一个选项卡的视图控制器的类标识设置为我的 tableView 控制器。

这很好用,我看到表格的内容填满了整个屏幕。

但是,这并不是我最终目标中真正想要的——我想要一个具有多个视图的复合窗口: - 上述表格 - 包含数据的自定义视图

所以我要做的是为此内容创建一个 nib(称为 contentNib),将选项卡的类从 tableView 控制器更改为通用 UIViewController,并将该选项卡的 nib 设置为这个新的 contentNib。

在这个新的 contentNib 中,我拖动 tableView 并将 File's Owner 设置为 TableViewController。然后我将数据源和委托链接到文件的所有者(即 TableViewController)。

令人惊讶的是这不起作用,我收到错误:

**Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x3b0f910'**

这让我感到困惑,因为文件的所有者是 TableViewController,它被指定为数据源和委托。是否有人了解我的困惑,或者链接到如何让复合视图包含 tableView 的示例?

*****update**** 我在 Apple TableView 编程指南中看到了这一点: "注意:如果要管理的视图由多个子视图组成,其中一个是表视图,则应使用 UIViewController 子类而不是 UITableViewController 的子类来管理表视图。UITableViewController 类的默认行为是使表格视图填充了导航栏和标签栏之间的屏幕(如果有的话)。”*

【问题讨论】:

    标签: iphone


    【解决方案1】:

    文件的所有者应该是您实例化的类。例如,在您的 contentNib 文件中,您应该分配并初始化一个表视图,将 @"contentNib" 作为参数传递给 initWithNibNamed:bundle:。听起来您没有这样做,因为文件的所有者虽然在 IB 中设置为 UITableViewController,但实际上只是一个 UIViewController。

    IB中的设置只是为了让IB知道可以提供哪些渠道和行动;您有责任提供适当的对象。

    【讨论】:

    • 谢谢本。我对 IB 有很多困惑,而你帮助解决了其中一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2020-05-21
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多