【发布时间】:2019-04-12 15:49:09
【问题描述】:
我正在尝试将包含表视图的视图控制器(我们称之为 VC2)加载到父视图控制器 (VC1) 内的容器视图中。我遇到的问题是,当我尝试在 VC2 中注册 nib 或设置 tableview 的委托/数据源时,出现 nil 错误。
我尝试删除delegate 和dataSource 连接,但这只会加载一个空白的tableview
这是我用来向容器视图控制器传输数据的代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let listVC = segue.destination as? BusinessListViewController {
listVC.bottomSheetDelegate = self
listVC.Businesses = self.Businesses
listVC.parentView = businessListView
listVC.viewDidLoad()
}
}
这是 VC2 中的 viewDidLoad() 语句
override func viewDidLoad() {
super.viewDidLoad()
BusinessListTableView.dataSource = self
BusinessListTableView.delegate = self
BusinessListTableView.register(UINib.init(nibName: "BusinessTableViewCell", bundle: nil), forCellReuseIdentifier: "BizCell")
}
我希望有人可以帮助弄清楚如何让这个笔尖正确填充。当通过 segue 导航到 VC2 时,它正在工作。
【问题讨论】:
-
这对我来说很奇怪,但毕竟你用 .reloadData() 更新了你的 UITableView 了吗?
-
你是如何设置视图控制器容器的?您需要将
VC2作为child添加到容器中,将VC2的视图添加到容器的视图层次结构中,在容器中设置VC2的frame(设置约束)然后调用@987654332 @。见Apple's Guide -
第一个注意事项:从不调用
viewDidLoad()- 这是自动调用的,如果您认为需要调用它,则说明您做错了其他事情。下一步:您说您 “试图将包含 tableview 的视图控制器(我们称之为 VC2)加载到父视图控制器 (VC1) 内的容器视图中” ...显示您正在使用的代码要做到这一点。这可能是您没有做您需要做的事情的地方。 -
@DonMag 我将 VC2 嵌入到容器视图中,这一切都是通过界面构建器完成的。所以没有为此建立代码
-
仅凭您提供的信息真的很难说... "当我尝试在 VC2 中注册 nib 或设置 tableview 的委托/数据源时,我收到一个 nil 错误" 什么是零?您还说 “当通过 segue 导航到 VC2 时它正在工作” .. 但是您显示的代码 正在导航到它通过segue。使用调试器单步调试代码并检查变量,以便找出“工作”和不工作之间的不同之处。
标签: swift uitableview xib nib uicontainerview