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



我需要在单击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.
} 
}

这是我会做的。

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

创建视图:

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添加到另一个视图中,以便能够对其进行更多自定义。

像这样将一致性添加到UIKeyInput。它应该有效。

class RespondingButton: UIButton, UIKeyInput {
override var canBecomeFirstResponder: Bool {
return true
}
var hasText: Bool = true
func insertText(_ text: String) {}
func deleteBackward() {}
}

最新更新