Swift 输入法切换器仅在将焦点更改到另一个窗口后才能工作

问题描述 投票:0回答:2

我正在尝试编写一个MacOS应用程序,它可以通过先前指定的快捷方式切换输入法(此处为

command+space
)。 切换输入法可以正常工作,以便当我输入快捷方式时,状态栏(右上角)的语言图标立即发生变化。 我在这里遇到的问题是实际的输入法没有改变。 例如,如果我在选择的输入法是韩语时运行我的应用程序,那么虽然状态栏在
command+space
之后显示所选的输入法是日语,但我只能输入韩语字符。 但是,当我将焦点转移到另一个文本应用程序(例如从 sublime text 到 xcode)后,只有这样才能很好地反映所选的输入法。 我使用的是 MacOS Monterey 12.6 和 Xcode 13.1。

我的项目包含两个源文件。 文件

AppDelegate.swift
中的代码如下:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    var switcher = Switcher()
}

文件中的代码

Switcher.swift
如下:

import Cocoa
import MASShortcut

class Switcher{
    var lang: Int = 0
    
    var kr: TISInputSource?
    var jp: TISInputSource?
    var en: TISInputSource?
    
    init(){
        let inputSourceNSArray = TISCreateInputSourceList(nil, false).takeRetainedValue() as NSArray
        let inputSourceList = inputSourceNSArray as! [TISInputSource]
        for inputSource in inputSourceList {
            if inputSource.id == "com.apple.inputmethod.Korean.2SetKorean" {
                self.kr = inputSource
            }
            if inputSource.id == "com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese" {
                self.jp = inputSource
            }
            if inputSource.id == "com.apple.keylayout.ABC" {
                self.en = inputSource
            }
        }
        self.register()
    }
    
    func switchLang(){
        self.lang = (self.lang + 1) % 3
        switch lang {
        case 0:
            TISSelectInputSource(self.kr)
        case 1:
            TISSelectInputSource(self.jp)
        case 2:
            TISSelectInputSource(self.en)
        default:
            print("error")
        }
    }
    
    func register() {
        let langShortcut = MASShortcut(keyCode: kVK_Space, modifierFlags: [.command])
        MASShortcutMonitor.shared()?.register(langShortcut, withAction: {
            self.switchLang()
        })
    }
}

我是参考KAWA写的这些代码,但是KAWA并没有提出这个问题。 我已经分析了KAWA的所有代码好几次了,我无法找出为什么同样的问题在KAWA中不会出现。 我对 Swift 很陌生,我不知道如何接近。 你可以帮帮我吗....?谢谢你。

swift macos input keyboard-shortcuts
2个回答
0
投票

我以前也遇到过这个问题,原因是启用了沙箱。


0
投票

我也遇到了这个问题,请教一下主解决了吗,或者有答案了踢我一下

© www.soinside.com 2019 - 2024. All rights reserved.