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
然后只需访问标签,如so
messageView.messageLabel.text=“some message”


或者只使用协议和委托。

您正在创建消息视图的新副本。如果您真的想更改另一个视图控制器上的文本,最好使用委托方法告诉视图控制器使用此新文本更新其自己的消息,除了@Scriptable comment“you's creating a new copy of the message view”(您正在创建消息视图的新副本)之外,它不是与Xib链接的文本,因此您应该获得“致命错误:在展开可选值时意外发现nil”错误,因为
messageLabel
为nil。