在UIViewController类中,@ IBMOutlet self.tableView为nil

时间:2016-01-18 14:09:37

标签: ios objective-c swift uitableview uiviewcontroller

我有一个UIViewController(FiltersViewController),故事板中有2个组件,UITableView和UIStackView如下:

enter image description here

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缺失

关于我可能做错的任何想法。

2 个答案:

答案 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已经连接起来,就像魅力一样!