2017-07-31 24 views
0

現在、カスタムビューを作成中です。このビューにはUITableViewが含まれています。このコントロールのデリゲートは、カスタムコントロールのバッキングクラスになります。UIViewがロードされているかどうかを確認する方法

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のデリゲートを取得する必要がありますが、ビューがロードされた後、それはのみ発生することができます(そうでない場合autoCompleteViewnilになります)。

UIViewControllerの場合は、単にviewDidLoadに追加してもかまいませんが、ここでは開いていません。だから私は、このクラスでは、ここでいくつかの点で今UITableView

答えて

1

のためのデリゲートを設定するに取り掛かることができますどのように、私はのUITableViewのデリゲートを取得する必要がありますが、それは唯一のビューがロードされた後に発生する可能性が

あなたはそれが何を意味するかは完全にはわかりません。あなたがその方法の中にいる場合は、ビューMyViewが読み込まれます。クラスがそこにいなければ、それを呼び出すことはできませんでした。ですから、initWithFrame:で設定するとすべてがうまくいくはずです。

あなたのビューがInterface Builderでレイアウトされているため、デコードされた場合のみ、私が考えることができます。その場合、ビューがすでにロードされている可能性がありますが、一部の参照がロードされていない可能性があります。このため、すべてのデコードが完了した後にawakeFromNibに電話がかかります。

0

//あなたはこれらの

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

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

    override func didMoveToSuperview() { 
     super.didMoveToSuperview() 
    } 
} 
を試すことができます