我有一个UIViewController(FiltersViewController),脚本、UITableView和UIStackView中有两个组件,如下所示:
ios - 在UIViewController类中,@ IBOutlet self.tableView为nil-LMLPHP

class FiltersViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var tableView: UITableView! // PROBLEM: this is nil

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView // is always nil
    }

    func someFunc() {
        self.tableView // is always nil
    }
}

我正在将FiltersViewController.view添加到当前的UIViewController,如下所示:
class CurrentViewController: UIViewController {

    let floatingView: UIView = UIView()
    var filtersViewController = FiltersViewController()

    override func viewDidLoad() {
        super.viewDidLoad()

        floatingView.frame = CGRectMake(-201, 0, 270, 270)
        floatingView.clipsToBounds = false
        self.view.addSubview(floatingView)

        floatingView.addSubview(filtersViewController.view)
    }
}

如果我只将FiltersViewController更改为UITableViewController子类,那么它可以工作,如下所示:
class FiltersViewController: UITableViewController {

但是,这个更改的另一个问题是,Stack View丢失了
任何关于我可能做错什么的想法。

最佳答案

这里的问题:var filtersViewController = FiltersViewController()。您需要通过将nib传递给init方法来初始化控制器。
更改属性声明,

var filtersViewController: FiltersViewController?

要从情节串连板加载,应该在viewDidLoad中执行此操作
filtersViewController = storyboard?.instantiateViewControllerWithIdentifier("YourFilterViewControllerIdentifier")
floatingView.addSubview(filtersViewController.view)

10-08 18:51