如何禁用NSTextView的用户交互?

时间:2017-06-11 14:03:19

标签: swift macos cocoa

在Cocoa Touch中,您可以禁用文本视图的用户交互,如下所示:

let textView = UITextView()
textView.isUserInteractionEnabled = false

但是在Cocoa中,NSTextView没有这么容易使用的API 那么禁用NSTextView用户交互的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以通过以下方式停用“editable

textView.isEditable = false

它的'selectable by:

textView.isSelectable = false

然而,当你禁用它们时。此textView仍会拦截Mouse-down事件,这与isUserInteractionEnabled不同。

所以,现在,要启用点击,我的解决方案是继承NSTextView并覆盖其'hitTest:

class TextView: NSTextView {
  override func hitTest(_ point: NSPoint) -> NSView? {
    return nil
  }
}

封装的方式就在这里

class StaticTextView: NSTextView {
  override init(frame frameRect: NSRect) {
    super.init(frame: frameRect)
  }

  override init(frame frameRect: NSRect, textContainer container: NSTextContainer?) {
    super.init(frame: frameRect, textContainer: container)
  }

  required init?(coder: NSCoder) {
    super.init(coder: coder)
  }

  func setup() {
    isSelectable = false
    isEditable = false
  }

  override func hitTest(_ point: NSPoint) -> NSView? {
    return nil
  }
}