iOS - UIButton成为打开键盘的第一响应者

时间:2017-08-03 18:02:41

标签: ios swift uibutton becomefirstresponder

我需要在按钮上单击UIButton打开键盘(不使用/用于UITextField)。我试图通过覆盖变量canBecomeFirstResponder来创建自定义按钮,但它不起作用。

还有其他方法吗?

注意:我想将UIPIckerView设置为键盘框架中UIButton的输入视图。

这是我的代码。

class RespondingButton: UIButton {


    override var canBecomeFirstResponder: Bool {
        return true
    }


    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }


    private func commonInit() {
        // common init
    }



}

在我的视图控制器中,我连接了按钮操作。

class TestViewController: UIViewController {

   @IBAction func testBecomeFirstResponder(button: RespondingButton){
      button.becomeFirstResponder()  // Not working.
   } 
}

2 个答案:

答案 0 :(得分:2)

像这样添加UIKeyInput的一致性。它应该工作。

class RespondingButton: UIButton, UIKeyInput {

    override var canBecomeFirstResponder: Bool {
        return true
    }

    var hasText: Bool = true
    func insertText(_ text: String) {}
    func deleteBackward() {}
}

答案 1 :(得分:2)

这就是我要做的事。

  1. 创建透明的textField 1x1px,假设它是myTextField
  2. 然后添加所需的按钮。在按钮操作中,创建myTextField.becomeFirstResponder()
  3. 创建视图:

    let pvBackground: UIView = {
            let v = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
            v.backgroundColor = .white
            v.translatesAutoresizingMaskIntoConstraints = false
            return v
    }()
    

    viewDidLoad

    pvBackground.addSubview(yourPickerView)//add the picker into the pvBackground
    myTextField.inputView = pvBackground
    

    我将pickerView添加到另一个视图中,以便能够对其进行更多自定义。