我的目标是更新xib文件的UIViewController
标签的text
属性。标签在UIView
子类中声明,并带有IBOutlet
连接。
let myView = myClass()
myView.myLabel!.text = "Hello!"
标签似乎是nil
。实际上,我收到以下运行时错误:fatal error: unexpectedly found nil while unwrapping an Optional value
。如果我不打开可选项,程序将运行,但标签不会更新其text
。
如何避免我的应用将标签标记为nil?
底线:如果我理解正确,我必须在UIViews
中声明两个UIViewController
。一个加载笔尖,另一个只更新标签。但它们都在相同的xib文件上运行。这是正确的做法吗?
答案 0 :(得分:1)
当您尝试将文字设置为myLabel
时,nil
可能仍为"Hello!
。做一些日志记录来验证这一点。
myLabel
仍为nil
,因为您的myView
对象尚未从笔尖加载其视图。您可以通过将其添加为子视图来强制执行此加载,然后将文本设置为您喜欢的任何内容。
答案 1 :(得分:1)
标签在UIView子类中使用IBOutlet声明 连接。
我相信你在这里约myClass
这是UIView
的子类。如果您已将此添加到UIViewController
的XIB并通过IBOutlet
连接,则无需在let myView = myClass()
重新初始化它。
通过执行此操作,您将创建另一个未显示在UIViewController
上的对象,因此,此对象的UILabel
属性中的任何更改都不会更改您的UI。
正确连接IBOutlet
后,它应该在swift类文件中显示如下内容:
@IBOutlet weak var myView : myClass?
然后在viewDidLoad
功能中,您可以致电self.myView.myLabel!.text = "Hello!"
查看更改。
编辑:发布OP评论:
要加载UIView
使用以下内容:
self. myView = NSBundle.mainBundle().loadNibNamed("myXib", owner: self, options: nil)[0] as? myView