如何确定UIView是否已加载

时间:2017-07-31 07:00:45

标签: ios swift uitableview uiview

我目前正在创建自定义视图。这个视图有一个UITableView。此控件的委托将是自定义控件的支持类。

class MyView: UIView {

    @IBOutlet weak var autoCompleteView: UITableView!

}

extension MyView: UITableViewDelegate {

}

extension MyView: UITableViewDataSource {

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath as IndexPath)
        cell.textLabel!.text =  "\(indexPath.row) - Its working"
        return cell
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }
}

现在在这里,在这个类中,我需要获取UITableView的委托,但只有在加载视图后才会发生(否则autoCompleteView将为nil })。

如果它在UIViewController中,我只需将其添加到viewDidLoad,但我在这里没有打开。那么我该如何设置UITableView

的委托

2 个答案:

答案 0 :(得分:1)

  

现在在这里,在这个类中,我需要获取UITableView的委托,但这只能在视图加载后才会发生

我不完全确定你的意思。如果您在其中的方法内部,则会加载视图MyView。如果该类不在那里,则无法调用它的方法。因此,如果您在initWithFrame:中配置内容,一切都应该没问题。

我唯一能想到的是,如果您的视图在Interface Builder中布局,那么将被解码。在这种情况下,虽然可能已加载视图,但某些引用可能不会。为此,在完成所有解码后,您将收到awakeFromNib的呼叫。

答案 1 :(得分:0)

//你可以尝试这些

class MyView: UIView {
    @IBOutlet weak var autoCompleteView: UITableView!

    override func willMove(toSuperview newSuperview: UIView?) {
        super.willMove(toSuperview: newSuperview)
    }

    override func didMoveToSuperview() {
        super.didMoveToSuperview()
    }
}