在Xcode
中,当我创建一个包含tableview的新视图控制器时,我有两个选项
UITableViewController
UIViewController
和UITableViewDelegate
协议的新UITableViewDataSource
假设我正确实现了协议的所有必需和可选方法,那么使用UITableViewController
是否有任何优势(除了不必编写方法存根)?意味着,在UITableViewController
类的幕后实现了什么(内存管理,缓存等),使选项1成为比选项2更好的选择?
答案 0 :(得分:47)
无论采用哪种方法,都必须编写委托和协议方法。
当您需要具有表格视图的视图控制器时,应该选择使用UIViewController
而不是UITableViewController
的原因只有两个:
UITableViewController
解决此问题)。以下是UITableViewController
为您做的所有需要复制的事情:
UITableView
。setEditing:animated:
方法以设置表格视图的editing
属性。viewWillAppear:
属性,取消选择clearsSelectionOnViewWillAppear
方法中的最后一个选定行。viewDidAppear:
方法闪烁表格视图的滚动条。contentInset
(从iOS 7开始)。答案 1 :(得分:13)
UITableViewController
会提供自动滚动,而常规UIViewController
则不会。
UITableViewController
可以在视图中可靠地移动已编辑的区域,而无需使用键盘通知。自iOS诞生以来,它已经这样做了,而键盘通知已经改变,很少提供向后兼容性。
每当视图需要编辑时(如登录屏幕),请考虑使用UITableViewController
并使用完全 0行代码来利用此独特功能。
不幸的是,采用UIViewController
协议的常规UITableViewDelegate
不提供此功能。
从 iPhone OS 的曙光到今天。
►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。
答案 2 :(得分:5)
UITableViewController允许在iOS5上拥有静态表
答案 3 :(得分:2)
UITableViewController
唯一拥有/做的常规UIViewController
不是tableView
属性,它符合UITableViewDelegate
和{{1}协议。 Ad RolandasR指出,将视图控制器设置为UITableViewDataSource
的后代也允许您使用静态表格单元格。
答案 4 :(得分:2)
使用UITableViewDelegate的主要优点是简单。但是,创建自己的TableViewController有一些好处,它不会假设视图是一个表:
1)您可以添加其他元素,并让表格占据屏幕的一小部分。 2)您可以添加一大堆辅助方法,这些方法可供从控制器派生的所有VC访问。我实现了帮助方法,当我有不同的UITableViewCell类型时自动返回行高,并自动注册各种单元格,从表中的CGPoint获取单元格引用的方法,pull-to-refresh回调等等。
虽然你总是可以从UITableViewController派生并添加辅助方法,但我认为主要优点是没有让表占用整个视图。