如何将 nib 文件中的 UITableView 加载到父视图控制器中的容器视图中?
Posted
技术标签:
【中文标题】如何将 nib 文件中的 UITableView 加载到父视图控制器中的容器视图中?【英文标题】:How to load a UITableView from a nib file into a container view in a parent view controller? 【发布时间】: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。使用调试器单步调试代码并检查变量,以便找出“工作”和不工作之间的不同之处。
【参考方案1】:
大概,当您的代码检索数据时,您有一个闭包?如果是这样,请在 prepareForSegue
中保存对“VC2”的引用并在该闭包中设置数据。
伪代码:
class ViewController1: UIViewController
var vc2: ViewController2!
override func viewDidLoad()
super.viewDidLoad()
callToGetData()
onCompletion
vc2.Businesses = self.Businesses
vc2.reload()
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if let listVC = segue.destination as? BusinessListViewController
listVC.bottomSheetDelegate = self
listVC.parentView = businessListView
vc2 = listVC
【讨论】:
以上是关于如何将 nib 文件中的 UITableView 加载到父视图控制器中的容器视图中?的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableView 单元格 Nib 文件仅在选择单元格后显示?
当在 nib 中声明 UITableView 时,UITableViewCell nil IBOutlets [重复]