我有一个UIViewController(FiltersViewController),故事板中有2个组件,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
缺失
关于我可能做错的任何想法。
答案 0 :(得分:2)
问题在这里:var filtersViewController = FiltersViewController()
。您需要通过将nib传递给init
方法来初始化控制器。
更改属性声明
var filtersViewController: FiltersViewController?
要从故事板加载,您应该在viewDidLoad
中执行此操作filtersViewController = storyboard?.instantiateViewControllerWithIdentifier("YourFilterViewControllerIdentifier")
floatingView.addSubview(filtersViewController.view)
答案 1 :(得分:0)
我最终在xib中创建了单独的UIView(与main.storyboard分开),并实例化如下:
let filtersView = UINib(nibName: "Filters", bundle: NSBundle(forClass: self.dynamicType)).instantiateWithOwner(self, options: nil)
在实例化视图后,将其添加为子视图
floatingView.addSubview(filtersView)
@IBOutlet
已经连接起来,就像魅力一样!