使用UITableViewController通过实现tableview委托和数据源方法的UIViewController有没有什么好处?
在Xcode
当我创build一个新的视图控制器来包含一个tableview我有两个选项
- 创build一个新的
UITableViewController
- 创build一个新的实现
UITableViewDelegate
和UITableViewDataSource
协议的UIViewController
假设我正确地实现了协议的所有必需的和可选的方法,是否有任何优势(除了不必编写方法存根)使用UITableViewController
? 意味着,在UITableViewController
类的后台实现了什么(内存pipe理,caching等),使得选项1成为比选项2更好的select?
无论采取哪种方法,您都必须编写委托和协议方法。
只有两个可能的原因,当你需要一个带有表视图的视图控制器时,你应该select通过UITableViewController
使用UIViewController
:
- 你需要表视图比视图控制器的视图小。
- 你需要添加额外的视图到视图控制器不滚动与表视图(虽然有办法解决这个与
UITableViewController
)。
以下是UITableViewController
为您需要复制的所有内容:
- 定义和设置
UITableView
。 - 将自己设置为表视图的dataSource和委托。
- 重写
setEditing:animated:
方法以设置表视图的editing
属性。 - 根据
clearsSelectionOnViewWillAppear
属性取消selectviewWillAppear:
方法中最后一个选定的行。 - 在
viewDidAppear:
方法中闪烁表视图的滚动条。 - 连接刷新控件(从iOS 6开始)。
- 第一次重新载入表格视图。
- 调整表视图的
contentInset
(从iOS 7开始)。 - 出现键盘时根据需要滚动表格视图。
具有0行代码的键盘优势
UITableViewController
在出现屏幕键盘时提供自动滚动 ,而普通UIViewController
则不提供。
UITableViewController
可靠地移动视图中的编辑区域,而不需要拨动键盘通知。 从iOS开始就已经这样做了,而键盘通知已经改变,很less提供向后兼容性。
每当一个视图需要编辑(如login屏幕),请考虑使用UITableViewController
并利用这个独特的function与正好0行代码 。
不幸的是,采用UITableViewDelegate
协议的常规UIViewController
不提供该function。
从iPhone OS的曙光到今天的作品 。
►在GitHub上find这个解决scheme和Swift Recipes的更多细节。
UITableViewController允许在iOS5上有静态表
UITableViewController
唯一的一个普通的UIViewController
没有,是一个tableView
属性,它符合UITableViewDelegate
和UITableViewDataSource
协议。 Ad RolandasR指出,将视图控制器设置为UITableViewController
(的后代)也可以使用静态表格单元格。
使用UITableViewDelegate的主要优点是简单。 但是,创build自己的TableViewController并不假设视图是表:
1)您可以添加其他元素,并使表占据屏幕的一小部分。 2)你可以添加一大堆辅助方法,这些辅助方法对于从你的控制器派生的所有VC都是可访问的。 我实现了帮助器方法来自动返回行高,当我有不同的UITableViewCelltypes,也自动注册各种单元格,方法从表中的CGPoint获取单元格引用,拉到刷新callback等。
虽然你总是可以从UITableViewController派生出来并添加帮助器方法,但我认为主要的好处并不在于占用整个视图。