Hi everyone, I need help with SwiftUI.
My goal: I have a macOS app built, and I want to...
- Have a button to open the emoji picker (managed this)
- When the user selects an emoji, intercept that value with
NSResponder
- Then use it on my Button label
The code below is a simplification. I need help: How can I intercept the value from the NSResponder and print it?
import SwiftUI import AppKit struct ContentView: View { private let emojiResponder = EmojiResponder() var body: some View { Button { // open the emoji picker if let window = NSApplication.shared.keyWindow { window.makeFirstResponder(emojiResponder) DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { NSApp.orderFrontCharacterPalette(nil) } } } label: { Text("Emoji?") } .onAppear { emojiResponder.onEmojiSelected = { selectedEmoji in print(selectedEmoji) } } } } // Custom Emoji NSResponder class EmojiResponder: NSResponder { var onEmojiSelected: ((String) -> Void)? // use insertTest method from NSResponder // I assume this allows me to get the input override func insertText(_ insertString: Any) { guard let selectedEmoji = insertString as? String else { return } onEmojiSelected?(selectedEmoji) print(selectedEmoji) } }
Can anyone give me a pointer on how to solve this?
What happens now:
- The emoji picker is opened, but nothing happens after I select an emoji
Top comments (0)