使用UITableViewController通过实现tableview委托和数据源方法的UIViewController有没有什么好处?

Xcode当我创build一个新的视图控制器来包含一个tableview我有两个选项

  1. 创build一个新的UITableViewController
  2. 创build一个新的实现UITableViewDelegateUITableViewDataSource协议的UIViewController

假设我正确地实现了协议的所有必需的和可选的方法,是否有任何优势(除了不必编写方法存根)使用UITableViewController ? 意味着,在UITableViewController类的后台实现了什么(内存pipe理,caching等),使得选项1成为比选项2更好的select?

无论采取哪种方法,您都必须编写委托和协议方法。

只有两个可能的原因,当你需要一个带有表视图的视图控制器时,你应该select通过UITableViewController使用UIViewController

  1. 你需要表视图比视图控制器的视图小。
  2. 你需要添加额外的视图到视图控制器不滚动与表视图(虽然有办法解决这个与UITableViewController )。

以下是UITableViewController为您需要复制的所有内容:

  1. 定义和设置UITableView
  2. 将自己设置为表视图的dataSource和委托。
  3. 重写setEditing:animated:方法以设置表视图的editing属性。
  4. 根据clearsSelectionOnViewWillAppear属性取消selectviewWillAppear:方法中最后一个选定的行。
  5. viewDidAppear:方法中闪烁表视图的滚动条。
  6. 连接刷新控件(从iOS 6开始)。
  7. 第一次重新载入表格视图。
  8. 调整表视图的contentInset (从iOS 7开始)。
  9. 出现键盘时根据需要滚动表格视图。

具有0行代码的键盘优势

UITableViewController在出现屏幕键盘时提供自动滚动 ,而普通UIViewController则不提供。

UITableViewController可靠地移动视图中的编辑区域,而不需要拨动键盘通知。 从iOS开始就已经这样做了,而键盘通知已经改变,很less提供向后兼容性。

每当一个视图需要编辑(如login屏幕),请考虑使用UITableViewController并利用这个独特的function与正好0行代码

不幸的是,采用UITableViewDelegate协议的常规UIViewController 提供该function。

的UITableViewController

iPhone OS的曙光到今天的作品

►在GitHub上find这个解决scheme和Swift Recipes的更多细节。

UITableViewController允许在iOS5上有静态表

UITableViewController唯一的一个普通的UIViewController没有,是一个tableView属性,它符合UITableViewDelegateUITableViewDataSource协议。 Ad RolandasR指出,将视图控制器设置为UITableViewController (的后代)也可以使用静态表格单元格。

使用UITableViewDelegate的主要优点是简单。 但是,创build自己的TableViewController并不假设视图是表:

1)您可以添加其他元素,并使表占据屏幕的一小部分。 2)你可以添加一大堆辅助方法,这些辅助方法对于从你的控制器派生的所有VC都是可访问的。 我实现了帮助器方法来自动返回行高,当我有不同的UITableViewCelltypes,也自动注册各种单元格,方法从表中的CGPoint获取单元格引用,拉到刷新callback等。

虽然你总是可以从UITableViewController派生出来并添加帮助器方法,但我认为主要的好处并不在于占用整个视图。