【发布时间】:2016-09-18 07:36:04
【问题描述】:
我制作了一个计算器应用程序 (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 在普通文本字段中?
【问题讨论】:
-
我会使用一些日志记录来查看何时查询
keyCommands,以确保当您认为它正在更新时它实际上正在更新。 -
下面的答案真的很有帮助,所以感谢克里斯。如果有人在这里停留需要任何帮助,请在下方发表评论,我可以为您提供帮助。
标签: ios swift bluetooth bluetooth-keyboard