我有一个UIViewController(FiltersViewController),脚本、UITableView和UIStackView中有两个组件,如下所示:
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)