分配 is 后 nib 属性为 nil - swift

Posted

技术标签:

【中文标题】分配 is 后 nib 属性为 nil - swift【英文标题】:nib property is nil after is has been assigned - swift 【发布时间】: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!")
    

视图加载正确,但是当我按下取消按钮时,它会打印“你在开玩笑吗!”这意味着 delegatenull 。为什么当我说它是 self 时,delegate 说它是 nil?

【问题讨论】:

【参考方案1】:

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

返回一个新的“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)

【讨论】:

【参考方案2】:

请试试这个

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)

这是因为您在设置标签和删除后分配了一个新的 ContactUs 实例

【讨论】:

以上是关于分配 is 后 nib 属性为 nil - swift的主要内容,如果未能解决你的问题,请参考以下文章

nib 中的 UIView 在 iPad 上是 nil,在 iPhone 上不是 nil

当在 nib 中声明 UITableView 时,UITableViewCell nil IBOutlets [重复]

从 nib 加载自定义 UIView 会导致无限循环或抛出 nil 异常

从 NIB 加载后 IBOutlet 实例为(空)

loadView

释放对象后分配'nil'的需要是啥