iOS - 表视图和表视图控制器有什么区别

问题描述:

在Xcode的对象库中,有两个选项可以用来创建表视图 - 表视图和表视图控制器。 两者之间的区别是什么以及它们何时被使用?iOS - 表视图和表视图控制器有什么区别

TableViewController是一个带有内置TableView的ViewController。这将拥有需要声明和设置的委托方法。这个VC已经是一个TableView委托和数据源。它不能调整大小。上行是易用性,下行灵活性非常有限。

TableView就是一个TableView(UIView的子类)。它可以添加到ViewController中并调整大小,与另一个基于视图的对象一起使用等等。优点是灵活性,缺点是必须自己设置代理和数据源方法(在我看来,非常值得花时间去获取灵活性)。

另一个需要注意的是,当使用新的Static TableView单元格(iOS5的一部分)时,必须使用TableViewController。

+0

当使用'UITableViewController'时,提示缺少调整大小/在同一屏幕上与其他控件共享'UITableView'的好处。那么另一方面呢,我们总是可以使用'tableHeaderView'和'tableFooterView'来实现其他控件。 – Till 2011-12-28 13:16:26

+0

确实如此,但是当像做一个静态SearchBar(不滚动)那样的东西时,带有TableView的VC运行良好。 – 2011-12-28 15:10:46

UITableViewControllerUIViewController的子类。它已经假定你将有UITableView作为你的rootView,所以你已经可以从代码访问tableView(self.tableView)。它实现了UITableViewDataSourceUITableViewDelegate协议。它也为你提供了很多方法来覆盖。它允许你不依赖于XIB文件,因为你已经知道你将拥有什么(UITableView作为rootView)。

UITableView就是UIView,通常你必须遵守,以我在为了填充(数据源),并用它(代表)的工作在你的UIViewController上面提到的协议,你可能要创建一个IBOutlet为您的UITableView

一方面你有速度,但你不像其他路径那么灵活。另一方面,你则相反。

+0

您的回答总体上正确,但以我的口味为中心,以IB为中心。只是为了澄清,IBOutlets当然只有在您打算使用InterfaceBuilder布置您的视图时才需要。这个任务当然可以使用普通代码完成(有时更好)。 – Till 2011-12-28 13:08:49

+0

我更喜欢在任何时候使用'InterfaceBuilder',它的速度更快,并且保持代码清洁。当然,你可以在你的代码中声明一个'UITableView',并将它添加到'UIView'中,尽管我不喜欢它。 – Peres 2011-12-28 13:17:20