別の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!")
}
}
表示が正しく読み込まれますが、キャンセルボタンを押すと、「あなたは私を冗談していますか?」というメッセージが表示されます。つまりdelegate
はnull
です。なぜ私はそれが自己であると言ったのですか?