我不知道,也找不到,当在 NSTextView 上按下 alt/选项按钮时,拖动选择功能的标准技术术语。
当按下 alt 时,会出现十字准线,并且可以在列中/垂直方向选择/突出显示文本,就像在 Xcode 中一样。
我想在我的 NSTextViews 中禁用这个功能,我该怎么做?
深入研究 AppKit 的反汇编很快就会发现一个钩子,它告诉NSTextView是否应该启用 ALT+拖动交互。这是名为_allowsMultipleTextSelectionByMouse. 改变其行为可以解决问题,但只能通过私有 API 实现。在这种情况下,这样做应该是非常安全的。
有以下两种方法可以改变上述方法:
NSUserDefaults该方法在内部访问NSProhibitMultipleTextSelectionByMouseof NSUserDefaults。您可以在应用程序级别控制此键的布尔值。这种方法的缺点是:
defaults命令行工具)。NSTextView应用程序中的所有实例,即使是那些您不一定想要更改的实例。我决定采用的方法是在我的NSTextView.
internal final class MyTextView: NSTextView {
internal static func initializeClass() {
try? MyTextView.swizzle(
Selector(("_allowsMultipleTextSelectionByMouse")),
with: #selector(getter: swizzled_allowsMultipleTextSelectionByMouse)
)
}
@objc dynamic internal var swizzled_allowsMultipleTextSelectionByMouse: Bool {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序引导代码中的某个地方,例如main您必须通过MyTextView.initializeClass().
上面的代码片段使用我自己的 swizzling API 包装器,但肯定有一些库可供使用,或者您可以遵循PSPDFKit 这篇文章中的建议。
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |