【发布时间】:2017-01-30 20:47:45
【问题描述】:
我有一个 UIView,我想将它加载到另一个 ViewController 中。在我的 VC 的 viewDidLoad 中,我加载了我的 UIView,它是 ContactUs,它工作正常。
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 可以重复使用,所以我这样编写了我的 ContactUs 类:
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 。为什么当我说它是 self 时,delegate 说它是 nil?
【问题讨论】: