gpt4 book ai didi

ios - 延迟覆盖 IBOutlet 对象的属性

转载 作者:行者123 更新时间:2023-11-28 09:46:04 25 4
gpt4 key购买 nike

我有一个自定义的 UItextView 子类,我在其中覆盖了 canBecomeFirstResponder():

class MyTextView: UITextView {

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}
*/

override func canBecomeFirstResponder() -> Bool {
return false
}

}

我这样做是为了让 UITextView 中检测到的数据链接(电话号码是 URL)能够正常运行,而无需选择 View 中的任何其他文本,但这与问题。

canBecomeFirstResponder() 是我想要重写的唯一属性/方法,因此子类化似乎有点矫枉过正。我将此自定义类与使用 Interface Builder 创建的 View 一起使用。有没有办法可以懒惰地覆盖 UIKit 对象属性的 IBOutlet?像这样:

@IBOutlet weak var contactTextView: UITextView! {
override func canBecomeFirstResponder: Bool = {
return false
}
}

我不想在 UITextView 上使用扩展,因为我只想为特定的 UITextView 覆盖 canBecomeFirstResponder(),而不是每个我的项目中使用了一个。

最佳答案

如果你想覆盖,你必须子类化。这两个概念是相互关联的。没有子类就不能覆盖。

你的“像这样”的想法在任何语言中都行不通。基本上,您描述的是一个匿名子类,它在 Java 中可用,例如(不是在 Swift 中)。但是,这必须在类实例化期间使用,而不是在声明变量时使用。

当然,您可以使用 didSet 中返回 false 的方法调配 canBecomeFirstResponder,但这比子类化要复杂得多。

关于ios - 延迟覆盖 IBOutlet 对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31684378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com