使用由按钮组成的自定义键盘将文本附加到 UITextField

Append text to a UITextField with custom keyboard made out of buttons

我有一个由一堆按钮组成的静态数字键盘,我还有三个 UITextFields、textField1、textField2 和 textField3,我在其中使用静态键盘输入文本。

这是我用来检测哪个文本字段当前处于焦点并输入按钮内容的代码。它有点工作,但我不喜欢我有三个 IF 语句的事实,而且我不确定如何防止键盘在点击文本字段时出现。

实现此功能的最佳方式是什么?

@IBAction func appendKey(sender: AnyObject) {
    let digit = sender.currentTitle!

    if(textField1.isFirstResponder()){
        textField1.text = textField1.text! +  digit!
    }else if(textField2.isFirstResponder()){
        textField2.text = textField2.text! +  digit!
    }else if(textField3.isFirstResponder()){
        textField3.text = textField3.text! +  digit!
    }
}

谢谢

如果显示的是标准键盘,则说明您的自定义键盘设置不正确。您的自定义键盘应该是每个 UITextFieldinputView。如果这样做,标准键盘将不会出现,而会出现。

您的自定义键盘应该是一个单独的 class 来处理它自己的所有按钮。看起来您在一个视图控制器中拥有所有内容 - 所有文本字段、所有按钮和所有按钮处理代码。这是一个糟糕的方法。创建自定义键盘 class 视图。将所有代码用于处理和显示该自定义视图中的按钮 class。在您的视图控制器中创建此视图的单个实例,并将自定义键盘视图实例分配给每个文本字段的 inputView 属性。

在自定义键盘 class 中,收听 UITextFieldTextDidBeginEditingNotification 通知。这就是您跟踪当前文本字段的方式。您的自定义键盘 class 除了跟踪当前文本字段外,不应对任何文本字段有任何特定引用。它还应确保文本字段的 inputView 是它本身。

在自定义键盘 class 的每个按钮处理程序中,获取您要附加的文本,然后使用该字符串调用文本字段的 insertText: 方法。而已。这将确保根据文本字段中的当前选择插入文本 and/or 替换。