gpt4 book ai didi

cocoa - 如何禁用 NSTextView 上的 Alt 拖动选择?

转载 作者:行者123 更新时间:2023-12-03 16:28:16 25 4
gpt4 key购买 nike

我不知道,也找不到在 NSTextView 上按下 alt/option 按钮时拖动选择功能的标准技术术语。

当按下 alt 时,会出现十字准线,并且可以在列/垂直方向上选择/突出显示文本,就像在 Xcode 中一样。

我想在我的 NSTextView 中禁用此功能,请问该怎么做?

最佳答案

深入研究 AppKit 的反汇编很快就会发现一个钩子(Hook),它告诉 NSTextView 是否应该启用 ALT+拖动交互。这是名为 _allowsMultipleTextSelectionByMouse 的私有(private)方法。改变它的行为可以解决问题,但只能通过私有(private) API 来实现。在这种情况下,这样做应该是非常安全的。

改变上述方法有以下两种方式:

方法 1:NSUserDefaults

该方法在内部访问NSUserDefaultsNSProhibitMultipleTextSelectionByMouse。您可以在应用程序级别控制此键的 bool 值。这种方法的缺点是:

  • 您的应用的用户可能会重新启用它(例如通过 defaults 命令行工具)。
  • 它会影响您应用中 NSTextView 的所有实例,甚至是那些您不一定想要更改的实例。

方法 2:调配

我决定采用的方法是在我的 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
}

}

在应用程序引导代码中的某个位置,例如 main 函数,您必须通过 MyTextView.initializeClass() 触发类初始化代码。

上面的代码片段使用了我自己的围绕 swizzling API 的包装器,但肯定有一些库可供使用,或者您可以遵循 this article by PSPDFKit 的建议.

关于cocoa - 如何禁用 NSTextView 上的 Alt 拖动选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56127853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com