我有一个自定义的 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/