2014-08-28 64 views
3

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

有没有UITableView的方法,我可以得到它与之相关的UITableViewController?

+0

UIView和UIViewController之间存在混淆。 UITableView没有与之关联的UITableViewController实例。它只有一个委托和一个数据源,通常是一个视图控制器。 UITableViewController只是一个方便的类,用于较少设置UIViewController。但它基本上仍然是一个UIViewController。 – PatrickNLT 2014-08-28 19:31:01

回答

3

不幸的是,如果没有创建子类并在实例化之后设置委托(但我高度强烈建议不要这样),就没有办法访问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:

+0

我没有在IB中链接的UITableViewController。我有一个自定义UIViewController链接到rootView,但表视图是这个根视图的子视图。我将如何在这一点上取得进展? – steventnorris 2014-08-28 18:59:12

+0

明白了。这有点复杂。现在更新我的答案... – 2014-08-28 19:04:21

+0

我假设你的UITableView有一个为数据源和UITableViewDelegate设置的委托。如果你已经设置了ViewController,你已经有了它的引用(通过委托)。 – Anand 2014-08-28 19:06:53

相关问题