我有一個連接UIViewController的UIView。作爲子視圖(通過接口生成器構建),我有一個UITableView。我想向該UITableView添加一個刷新控件,但要做到這一點,我需要獲取表視圖後面的默認控制器。從UITableView獲取UITableViewController
有沒有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