23

Xcode我创建一个新的视图控制器来包含一个表格视图时,我有两个选择

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

假设我正确实现了协议的所有必需和可选方法,那么使用UITableViewController? 意味着,在类中是否有任何东西(内存管理、缓存等)在幕后实现UITableViewController,使选项 1 比选项 2 更好?

4

5 回答 5

52

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

当您需要带有表格视图的视图控制器时,您应该选择使用UIViewControllerover的可能原因只有两个:UITableViewController

  1. 您需要表视图小于视图控制器的视图。
  2. 您需要向视图控制器添加不随表格视图滚动的其他视图(尽管有解决此问题的方法UITableViewController)。

以下是UITableViewController您需要复制的所有功能:

  1. 定义和设置UITableView.
  2. 将自身设置为表视图的数据源和委托。
  3. 覆盖该setEditing:animated:方法以设置editing表格视图的属性。
  4. viewWillAppear:根据clearsSelectionOnViewWillAppear属性取消选择方法中最后选定的行。
  5. 在方法中闪烁表格视图的滚动条viewDidAppear:
  6. 连接刷新控件(从 iOS 6 开始)。
  7. 在第一次出现时重新加载表格视图。
  8. 调整表格视图contentInset(从 iOS 7 开始)。
  9. 当键盘出现时,根据需要滚动表格视图。
于 2013-01-22T18:40:41.050 回答
13

0行代码的键盘优势

UITableViewController当屏幕键盘出现时提供自动滚动UIViewController,而常规不提供。

AUITableViewController可靠地在视图内移动编辑区域,而无需摆弄键盘通知。自 iOS 诞生之日起,它就已经这样做了,而键盘通知发生了变化,很少提供向后兼容性。

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

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

UITableViewController

iPhone OS 诞生今天

► 在GitHub 上找到此解决方案,并在Swift Recipes上找到更多详细信息。

于 2015-09-04T05:50:32.883 回答
5

UITableViewController允许在 iOS5 上拥有静态表

于 2013-01-22T18:28:29.513 回答
2

唯一 aUITableViewController有/做而常规UIViewController没有的,是一个tableView属性,它符合UITableViewDelegateandUITableViewDataSource协议。Ad RolandasR 指出,将视图控制器设置为(的后代)UITableViewController也可以让您使用静态表格单元格。

于 2013-01-22T18:30:02.327 回答
2

使用 UITableViewDelegate 的主要优点是简单。但是,创建自己的不假定视图是表的 TableViewController 有一些优点:

1)您可以添加其他元素并使表格占据屏幕的较小部分。2)您可以添加一大堆从您的控制器派生的所有VC都可以访问的辅助方法。当我有不同的 UITableViewCell 类型时,我实现了辅助方法来自动返回行高,并且还自动注册各种单元格、从表中的 CGPoint 获取单元格引用的方法、拉动刷新回调等。

虽然您始终可以从 UITableViewController 派生并添加辅助方法,但我认为主要优点是表格不会占据整个视图。

于 2013-01-22T18:30:34.307 回答