【问题标题】:Get UITableViewController from UITableView从 UITableView 获取 UITableViewController
【发布时间】:2014-10-22 17:43:39
【问题描述】:

我有一个带有连接 UIViewController 的 UIView。作为一个子视图(通过界面构建​​器构建),我有一个 UITableView。我想向该 UITableView 添加一个刷新控件,但要做到这一点,我需要在表视图后面获取默认控制器。

是否有 UITableView 的方法可以让我从中获取与之关联的 UITableViewController?

【问题讨论】:

  • UIView 和 UIViewController 之间存在混淆。 UITableView 没有与之关联的 UITableViewController 实例。它只有一个委托和一个数据源,它们通常是一个视图控制器。 UITableViewController 只是一个方便的类,用于减少 UIViewController 的设置。但它本质上仍然是一个 UIViewController。

标签: objective-c uitableview uirefreshcontrol


【解决方案1】:

不幸的是,没有子类化和实例化后设置委托的情况下,没有办法访问 UITableView 的控制器(但我强烈建议不要这样做)。您最好的选择是在您已链接到 IB 中的表格视图的 UITableViewController(如果可能,在代码中)设置刷新控件。

要将刷新控件添加到尚未由 UITableViewController 控制的 UITableView,您可以执行以下操作。

首先,创建一个 UITableViewController 来管理控件。

UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.tableView;

创建控件,添加一个管理UITableView刷新后状态的target,然后赋值给刚刚创建的tableViewController。

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refreshControlValueChanged:) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = refreshControl;

最后要做的是在你的 UIViewController 中实现refreshControlValueChanged:

【讨论】:

  • 我在 IB 中没有链接 UITableViewController。我有一个自定义 UIViewController 链接到 rootView,但表视图是这个根视图的子视图。到那时我将如何进步?
  • 我假设你的 UITableView 有一个为数据源和 UITableViewDelegate 设置的委托。如果您已将其设置为 ViewController,则您已经拥有对它的引用(通过委托)。
  • @Anand 我确实有一个代表集。委托是我使用的自定义 UIViewController,而不是 UITableViewController。我如何从那里访问它?
  • @Anand 这是真的。我有一个 UIViewController 的视图,其中 tableview 作为子视图。那么此时我该如何在我的桌子上设置一个 refreshControl 呢?
  • 除此方法外,您还可以添加 UITableViewController 作为 childViewController。根据文档 UITableViewController 已经包含它。 developer.apple.com/library/ios/documentation/uikit/reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
相关资源
最近更新 更多