如何将UITableView从nib文件加载到父视图控制器中的容器视图中?

问题描述 投票:0回答:1

我正在尝试将包含表视图的视图控制器(让我们调用此VC2)加载到父视图控制器(VC1)中的容器视图中。我遇到的问题是当我尝试在VC2中注册nib或设置tableview的委托/数据源时,我得到一个nil错误。

我试过删除delegatedataSource连接,但这只是加载一个空白的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")
    }

我希望有人可以帮助弄清楚如何让这个笔尖正确填充。当VC2通过segue导航到它时它正在工作。

swift uitableview xib nib uicontainerview
1个回答
0
投票

据推测,当代码检索数据时,你有一个闭包?如果是这样,请在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
         }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.