我需要在单击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.
}
}
这是我会做的。
- 创建 1x1px 的透明
textField
,假设它是myTextField
. - 然后添加所需的按钮。在按钮操作中使
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() {}
}