在实现tableview委托和数据源方法的UIViewController上使用UITableViewController有什么好处吗?

时间:2013-01-22 18:24:15

标签: ios uitableview

Xcode中,当我创建一个包含tableview的新视图控制器时,我有两个选项

  1. 制作新的UITableViewController
  2. 创建一个实现UIViewControllerUITableViewDelegate协议的新UITableViewDataSource
  3. 假设我正确实现了协议的所有必需和可选方法,那么使用UITableViewController是否有任何优势(除了不必编写方法存根)?意味着,在UITableViewController类的幕后实现了什么(内存管理,缓存等),使选项1成为比选项2更好的选择?

5 个答案:

答案 0 :(得分:47)

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

当您需要具有表格视图的视图控制器时,应该选择使用UIViewController而不是UITableViewController的原因只有两个:

  1. 您需要将表视图小于视图控制器的视图。
  2. 您需要向视图控制器添加其他视图,这些视图不会随表视图一起滚动(尽管有办法通过UITableViewController解决此问题)。
  3. 以下是UITableViewController为您做的所有需要​​复制的事情:

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

答案 1 :(得分:13)

具有0行代码的键盘优势

当出现屏幕键盘时,

UITableViewController会提供自动滚动,而常规UIViewController则不会。

UITableViewController可以在视图中可靠地移动已编辑的区域,而无需使用键盘通知。自iOS诞生以来,它已经这样做了,而键盘通知已经改变,很少提供向后兼容性。

每当视图需要编辑时(如登录屏幕),请考虑使用UITableViewController并使用完全 0行代码来利用此独特功能。

不幸的是,采用UIViewController协议的常规UITableViewDelegate 提供此功能。

UITableViewController

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派生并添加辅助方法,但我认为主要优点是没有让表占用整个视图。