【发布时间】:2014-08-07 19:31:27
【问题描述】:
我的大部分应用程序都是以编程方式创建的,但我有一些复杂的视图是使用 Interface Builder 创建并以编程方式加载的。
在一个视图中,我有一个以编程方式创建的 UITableViewController 子类,它的 tableView 属性分配给 XIB 中的 UITableView 实例,引用为 IBOutlet。这发生在 XIB 的 UIViewController 的 viewDidLoad 中,并且表格视图正确显示。
在某一时刻,我需要更改表格视图的全部内容。理想情况下,我想将该视图与第一个 UITableViewController 断开连接,并将其连接到另一个为其提供不同数据的视图。尝试将视图分配给新控制器的 tableView 属性会导致“一个视图一次只能与一个视图控制器关联!”在分配新控制器之前将前一个控制器的 tableView 分配为 nil 可以避免错误,但是 table view 从屏幕上消失了。
老实说,我知道表格视图实例通常由 UITableViewController 管理。我在文档中找不到任何关于 setTableView 自动在分配的 tableView 中设置委托和数据源的反向引用的内容,所以我很惊讶我的外部创建的 tableView 首先工作。事实上,TVC 文档似乎将 UITableViewController 的 tableView 属性讨论为只读,即使它没有这样标记。
【问题讨论】:
-
您是否也尝试将 UITableView 添加到 UITableViewController 的视图中?
-
@MarcusAdams 您的意思是将 UITableView 分配为 TVC 的视图,还是将其添加为子视图? TVC 理想情况下没有自己的视图,因为它应该只是分配的 tableView。我没有明确设置它,因为我假设 UITableViewController 的默认 setTableView 会为我设置它。在调试时检查它似乎证实了这一点。
标签: ios objective-c cocoa-touch uitableview uikit