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

标签 ios swift uitextview iboutlet becomefirstresponder

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

相关文章:

ios - 如何使用 Swift 在 SpriteKit 中重置 NSUserDefaults 的高分

ios - 快速 JSON 错误字典?我该怎么办

iphone - 可以在不使用 UITextField 和 UITextView iphone 应用程序的情况下显示键盘吗?

ios - 如何为 UITextView 中的每个段落放置不同的 headIndent(对齐方式)

ios - 在 native ios 中获取 Google 加新闻提要

ios - 返回 TableView 后 TableView 重新加载行

swift - 为什么列表中带有导航链接的项目变成蓝色?

ios - Swift - 将 html 字符串转换为属性字符串并再次返回时,字体大小会增加

ios - 在 arm7s 上运行 arm7 内置的 iOS SDK

ios - 代码中有一个类对象,但其类型未声明,无法使用