当在NSTextView上按下alt / option按钮时,我不知道并且找不到用于拖动选择功能的标准技术术语。
按alt时,会出现十字线,并且可以像在Xcode中一样以列/垂直方式选择/突出显示文本。
我想在我的NSTextViews中禁用此功能,请问该怎么做?
答案 0 :(得分:0)
快速查看AppKit的反汇编,就会发现一个钩子,该钩子告诉return (kp.GetType() == typeof(RsaPrivateCrtKeyParameters)) ? MakePrivateRCSP(rsaKey, (RsaPrivateCrtKeyParameters)kp)) : MakePublicRCSP(rsaKey, (RsaKeyParameters)kp);
是否应启用ALT +拖动交互。这是称为NSTextView
的私有方法。改变其行为可以解决问题,但只能通过私有API才能实现。在这种情况下,这样做应该很安全。
可以通过以下两种方式更改上述方法:
_allowsMultipleTextSelectionByMouse
该方法在内部访问NSUserDefaults
中的NSProhibitMultipleTextSelectionByMouse
。您可以在应用程序级别上控制此键的布尔值。这种方法的缺点是:
NSUserDefaults
命令行工具)。defaults
的所有实例,甚至是您不一定要更改的实例。我决定采用的方法是在NSTextView
的子类中对该方法进行简单处理。
NSTextView
在诸如internal final class MyTextView: NSTextView {
internal static func initializeClass() {
try? MyTextView.swizzle(
Selector(("_allowsMultipleTextSelectionByMouse")),
with: #selector(getter: swizzled_allowsMultipleTextSelectionByMouse)
)
}
@objc internal var swizzled_allowsMultipleTextSelectionByMouse: Bool {
return false
}
}
函数之类的应用程序自举代码中,您必须通过main
触发类初始化代码。
上面的代码段使用了我自己的包装器来包装复杂的API,但是肯定有一些库可以使用,或者您可以按照this article by PSPDFKit的建议进行操作。