From b2c2182d36fab08e0b50cee67a6192d54f0579a1 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Fri, 9 Dec 2022 14:45:06 +0800 Subject: [PATCH] TextEditorEX // Add SwiftUI tooltip binding support. --- .../SwiftExtension/SwiftUIExtension.swift | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftUIExtension.swift b/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftUIExtension.swift index f1b04f55..a534244e 100644 --- a/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftUIExtension.swift +++ b/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftUIExtension.swift @@ -89,9 +89,11 @@ public struct VisualEffectView: NSViewRepresentable { /// A much faster alternative than Apple official TextEditor. public struct TextEditorEX: NSViewRepresentable { @Binding var text: String + @Binding var tooltip: String - public init(text: Binding) { + public init(text: Binding, tooltip: Binding) { _text = text + _tooltip = tooltip } public func makeNSView(context: Context) -> NSScrollView { @@ -99,20 +101,23 @@ public struct TextEditorEX: NSViewRepresentable { } public func updateNSView(_ nsView: NSScrollView, context _: Context) { - if let textArea = nsView.documentView as? NSTextView, textArea.string != self.text { - textArea.string = text + if let textArea = nsView.documentView as? NSTextView { + if textArea.string != text { textArea.string = text } + if textArea.toolTip != tooltip { textArea.toolTip = tooltip } } } public func makeCoordinator() -> Coordinator { - Coordinator(text: $text) + Coordinator(text: $text, tooltip: $tooltip) } public class Coordinator: NSObject, NSTextViewDelegate { public var text: Binding + public var tooltip: Binding - public init(text: Binding) { + public init(text: Binding, tooltip: Binding) { self.text = text + self.tooltip = tooltip } public func textView(_ textView: NSTextView, shouldChangeTextIn range: NSRange, replacementString text: String?) @@ -120,6 +125,7 @@ public struct TextEditorEX: NSViewRepresentable { { defer { self.text.wrappedValue = (textView.string as NSString).replacingCharacters(in: range, with: text!) + self.tooltip.wrappedValue = (textView.toolTip as? NSString ?? "").replacingCharacters(in: range, with: text!) } return true }