2017-01-30 18 views
0

別のViewController内にロードしたいUIViewがあります。私のVCのviewDidLoadでは、私はContactUsであるUIViewを読み込み、正常に動作します。nibプロパティは、後に割り当てられません。swift

var nib : ContactUs! 
nib = ContactUs() 
nib.tag = 100 
nib.delegate = self 
nib = Bundle.main.loadNibNamed("ContactUs", owner: nib, options: nil)?[0] as! ContactUs 
nib.frame = CGRect(x: 0, y: 150, width: self.view.bounds.width , height: 120) 
self.view.addSubview(nib) 

私は私のUIViewを再利用可能にしたいと、私はこのような私のお問い合わせクラスを書いた:、

protocol ContactUsDelegate { 
    func closeWindow() 
} 

class ContactUs: UIView { 

    var delegate : ContactUsDelegate! 

    @IBOutlet weak var cancel: UIButton! 
    @IBAction func cancelAction(_ sender: Any) { 
    if delegate != nil 
    { 
     delegate.closeWindow() 
    } 
    else 
    { 
     print("are you kidding me!") 
    } 
} 
} 

と私のVCで私はクラスにContactUsDelegateを追加し、その中にこの機能を置く:

func closeWindow() 
{ 
    print("here we are!") 
    if let viewWithTag = self.view.viewWithTag(100) { 
     viewWithTag.removeFromSuperview() 
    }else{ 
     print("No!") 
    } 
} 

表示が正しく読み込まれますが、キャンセルボタンを押すと、「あなたは私を冗談していますか?」というメッセージが表示されます。つまりdelegatenullです。なぜ私はそれが自己であると言ったのですか?

答えて

2

nib = Bundle.main.loadNibNamed("ContactUs", owner: nib, options: nil)?[0] as! ContactUs

戻ります新しい "お問い合わせ" ビューエンティティ。この行の後にデリゲートを設定してみてください。

あなたのコードは次のようになります。

var nib : ContactUs! 
nib = Bundle.main.loadNibNamed("ContactUs", owner: nib, options: nil)?[0] as! ContactUs 
nib.tag = 100 
nib.delegate = self 
nib.frame = CGRect(x: 0, y: 150, width:   self.view.bounds.width , height: 120) 
self.view.addSubview(nib) 
1

あなたがタグとdelgate

を設定した後にお問い合わせの新しいインスタンスを割り当てるので、それはね、この

var nib : ContactUs! 
nib = Bundle.main.loadNibNamed("ContactUs", owner: self, options: nil)?[0] as! ContactUs 
nib.tag = 100 
nib.delegate = self 
nib.frame = CGRect(x: 0, y: 150, width: self.view.bounds.width , height: 120) 
self.view.addSubview(nib) 

を試してみてください

関連する問題