如何在iOS视图中访问子类的成员?

时间:2015-10-17 19:16:03

标签: ios uiview

我的目标是更新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文件上运行。这是正确的做法吗?

2 个答案:

答案 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