从UITableView获取UITableViewController
我有一个连接UIViewController的UIView。作为子视图(通过接口生成器构建),我有一个UITableView。我想向该UITableView添加一个刷新控件,但要做到这一点,我需要获取表视图后面的默认控制器。从UITableView获取UITableViewController
有没有UITableView的方法,我可以得到它与之相关的UITableViewController?
不幸的是,如果没有创建子类并在实例化之后设置委托(但我高度强烈建议不要这样),就没有办法访问UITableView的控制器。你最好的选择是在UITableViewController中设置刷新控制(如果可能的话),你已经链接到IB中的表格视图。
要将刷新控件添加到尚未由UITableViewController控制的UITableView,可以执行以下操作。
首先,创建一个UITableViewController来管理控件。
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.tableView;
创建控件,添加在刷新后管理的UITableView的状态的目标,然后将其分配给您刚刚创建的tableViewController。
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refreshControlValueChanged:) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = refreshControl;
最后要做的是在你的UIViewController中实现refreshControlValueChanged:
。
我没有在IB中链接的UITableViewController。我有一个自定义UIViewController链接到rootView,但表视图是这个根视图的子视图。我将如何在这一点上取得进展? – steventnorris 2014-08-28 18:59:12
明白了。这有点复杂。现在更新我的答案... – 2014-08-28 19:04:21
我假设你的UITableView有一个为数据源和UITableViewDelegate设置的委托。如果你已经设置了ViewController,你已经有了它的引用(通过委托)。 – Anand 2014-08-28 19:06:53
UIView和UIViewController之间存在混淆。 UITableView没有与之关联的UITableViewController实例。它只有一个委托和一个数据源,通常是一个视图控制器。 UITableViewController只是一个方便的类,用于较少设置UIViewController。但它基本上仍然是一个UIViewController。 – PatrickNLT 2014-08-28 19:31:01