当从不同的类调用更改时,UIView IBOutlet 不会更改
Posted
技术标签:
【中文标题】当从不同的类调用更改时,UIView IBOutlet 不会更改【英文标题】:UIView IBOutlet not changing when change called from a different class 【发布时间】:2020-08-13 02:02:05 【问题描述】:我有一个带有 UILabel 的 XIB。我已将 UILabel 引用到我创建的 UIView 类。我可以在初始化视图时使用label.text = "hi"
更改标签。当我尝试从另一个类调用更改时,它不会更改屏幕上的 UILabel(但如果我打印 label.text
它会显示为我设置的内容)。我无法在初始化时让 UILabel 加载文本,因为用户可以随时更改文本。 (switchText() 是从 UITableCell 调用的)
二等
class Second
func switchText()
let first = First()
DispatchQueue.main.async
first.label.text = "bye"
一级
class First: UIView
let kCONTENT_XIB_NAME = "First"
@IBOutlet var label: UILabel!
@IBOutlet var contentView: UIView!
override init(frame: CGRect)
super.init(frame: frame)
commonInit()
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
commonInit()
func commonInit()
Bundle.main.loadNibNamed(kCONTENT_XIB_NAME, owner: self, options: nil)
contentView.fixInView(self)
override func awakeFromNib()
super.awakeFromNib()
另外,在我的 XIB 中,我的 UIView 连接到 File's Owner
和 UIView 类中的 contentView。我的标签出口转到文件的所有者,然后转到声明为标签的 UIView 类。
【问题讨论】:
【参考方案1】:您并没有真正更改 First()
类的文本。您的 switchText()
函数所做的是创建名为 First 的类的另一个引用,然后为该新引用设置标签文本。
let first = First()
DispatchQueue.main.async
first.label.text = "bye"
您可以做的是使您的 switchText()
函数符合协议,然后通过委托在您的 First()
类上调用它。
protocol SecondClassDelegate
func didSwitchText(editedText: String)
class Second
var delegate: SecondClassDelegate!
func switchText()
delegate.didSwitchText("bye")
现在您可以将其添加到您的 First()
课程中
class First: SecondClassDelegate
func didSwitchText(editedText: String)
label.text = editedText
只是不要忘记在设置 Second()
类的任何位置设置委托
let second = Second()
second.delegate = self
我建议阅读此内容以更好地了解代表。 https://www.appcoda.com/swift-delegate/
【讨论】:
你能添加一个这样的例子吗?以上是关于当从不同的类调用更改时,UIView IBOutlet 不会更改的主要内容,如果未能解决你的问题,请参考以下文章
当从同一个组件调用时,两个 IBAction 触发的顺序是啥?