我制作了一个计算器应用程序(swift),并设置了一些 UIKeyCommands,以便如果用户有蓝牙键盘,他们可以在计算器中输入数字/符号。
它们的工作方式如下:
UIKeyCommand(input: "4", modifierFlags: [], action: "TypeFourInCalculator:")
func TypeFourInCalculator(sender: UIKeyCommand) {
btn4Press(UIButton)
}
这一切都很好,当用户按下四键时,将四添加到计算器中(即使计算器本身没有文本字段)。但是:我也有几个标准文本字段,我希望 UIKeyCommands 在用户进入其中一个文本字段时停止(这样他们就可以再次使用 BT 键盘定期键入)。在不禁用 UIKeyCommands 的情况下,键入会导致计算器功能,并且不会在文本字段中输入。
所以我尝试了这个尝试在文本字段成为第一响应者时禁用 UIKeyCommands:
let globalKeyCommands = [UIKeyCommand(input: "4", modifierFlags: [], action: "TypeFourInCalculator:"), UIKeyCommand(input: "5", modifierFlags: [], action: "TypeFiveInCalculator:")]
override var keyCommands: [UIKeyCommand]? {
if powertextfield.isFirstResponder() == false { // if the user isn't typing into that text field
return globalKeyCommands // use key commands
} else { // if the user is typing
return nil // disable those UIKeyCommands
}
这偶尔会起作用,但通常不起作用。如果用户还没有使用 BT 键盘输入任何内容(即我猜没有激活键盘命令),那么他们可以像往常一样使用 BT 键盘在文本字段中输入内容。但是,如果他们已经通过 UIKeyCommand 在计算器中输入了数字,他们就无法在文本字段中输入(嗯,有时它可以正常工作,有时它会像我添加该预防性代码之前那样失败)。键入的文本不会出现在该文本字段中,而是调用计算器命令。
那么当用户开始在普通文本字段中输入时,我能做些什么来禁用这些 UIKeyCommands 呢?