首页 > 解决方案 > SwiftUI:如何在 TextEditor 中禁用“智能引号”

问题描述

我正在使用 SwiftUI 为 MacOS 开发基于 Python 的图形计算器。

https://github.com/snakajima/macplot

我正在使用 SwiftUI 的 TextEditor 作为 Python 代码的编辑器,但我无法弄清楚如何禁用智能引号(UITextInputTraits、smartQuotesType: UITextSmartQuotesType)。

        VStack {
            TextEditor(text: $pythonScript.script)
            HStack {
                Button(action: {
                    pythonScript.run(clear: settings.shouldClear)
                }, label: {
                    Text("Plot")
                })
                Toggle("Clear", isOn: $settings.shouldClear)
            }
            if let errorMsg = pythonScript.errorMsg {
                Text(errorMsg)
                    .foregroundColor(.pink)
            }
        }

标签: swiftswiftuiappkituitextinputtraits

解决方案


经过几次试验,我想出了以下解决方法。它依赖于 TextEditor 在 NSTextView 之上实现这一事实,并在整个应用程序中改变其行为。这很丑陋,但有效。

// HACK to work-around the smart quote issue
extension NSTextView {
    open override var frame: CGRect {
        didSet {
            self.isAutomaticQuoteSubstitutionEnabled = false
        }
    }
}

推荐阅读