Ios 我如何在课外访问IBOutlet?
我有一个Ios 我如何在课外访问IBOutlet?,ios,swift,Ios,Swift,我有一个XIB,我想在这里更改标签文本。在那里,我创建了一个函数来设置标签文本 在另一个控制器中,我正在使用该xib,我想更改该控制器中的标签。我如何才能访问该标签?现在我正在做一些事情,但我认为e重新创建视图,并且标签没有更新 XIB类 import UIKit class MessageView: UIView { @IBOutlet var messageLabel: UILabel! func setMessage(error: String) { s
XIB
,我想在这里更改标签文本。在那里,我创建了一个函数来设置标签文本
在另一个控制器中,我正在使用该xib
,我想更改该控制器中的标签。我如何才能访问该标签?现在我正在做一些事情,但我认为e重新创建视图,并且标签没有更新
XIB类
import UIKit
class MessageView: UIView {
@IBOutlet var messageLabel: UILabel!
func setMessage(error: String) {
self.messageLabel.text = error
}
}
视图控制器
func updateMessage(error: Error){
let messageView = MessageView()
messageView.setMessage(error: error.localizedDescription)
}
问题在于,您没有调用需要更改标签文本的messageView实例,而是创建了messageView的新实例,然后更改了标签
最好的做法是使用协议/委托模式在对象之间进行通信,并从中更改文本。您需要做的就是在viewcontroller中添加messageView的引用。如果您正在使用故事板,我假设您正在添加@ibvar-messageView:messageView
然后只需访问标签,如somessageView.messageLabel.text=“some message”
或者只使用协议和委托。您正在创建消息视图的新副本。如果您真的想更改另一个视图控制器上的文本,最好使用委托方法告诉视图控制器使用此新文本更新其自己的消息,除了@Scriptable comment“you's creating a new copy of the message view”(您正在创建消息视图的新副本)之外,它不是与Xib链接的文本,因此您应该获得“致命错误:在展开可选值时意外发现nil”错误,因为messageLabel
为nil。