如何切换自定义应用内键盘

时间:2016-01-16 08:54:25

标签: ios swift inputview

最近I learned to make custom in-app keyboards。现在我希望能够在多个自定义键盘之间切换。但是,重置textField.inputView属性似乎不起作用。

我在以下项目中重新创建了此问题的简化版本。 UIView代表实际的自定义键盘。

import UIKit
class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let blueInputView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 300))
        blueInputView.backgroundColor = UIColor.blueColor()

        textField.inputView = blueInputView
        textField.becomeFirstResponder()


    }

    @IBAction func changeInputViewButtonTapped(sender: UIButton) {

        let yellowInputView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 300))
        yellowInputView.backgroundColor = UIColor.yellowColor()

        // this doesn't cause the view to switch
        textField.inputView = yellowInputView 
    }
}

运行此项给出了我最初的期望:弹出一个蓝色输入视图。

enter image description here

但是当我点击按钮切换到黄色输入视图时,没有任何反应。为什么?我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

经过一些实验,我现在有了解决方案。我需要让第一个响应者辞职,然后重新设置它。作为顶视图子视图的任何第一响应者可以通过调用endEditing间接地重新签名。

@IBAction func changeInputViewButtonTapped(sender: UIButton) {

    let yellowInputView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 300))
    yellowInputView.backgroundColor = UIColor.yellowColor()

    // first do this
    self.view.endEditing(true)
    // or this
    //textField.resignFirstResponder()

    textField.inputView = yellowInputView
    textField.becomeFirstResponder()
}

感谢thisthis回答这些想法。