如何在Swift中使用UIButton激活inputView?

Cha*_*ase 6 uibutton ios inputview swift

当用户点击UIButton时,我试图将UIDatePicker用作键盘。我能够使它与文本字段一起使用,但是我不喜欢如何显示光标,并且如果用户具有外部键盘,则用户可以输入任何文本。这是我的代码:

@IBAction func dateFieldStart(sender: UITextField) {
        var datePickerStartView  : UIDatePicker = UIDatePicker()
        datePickerStartView.datePickerMode = UIDatePickerMode.Time
        sender.inputView = datePickerStartView    // error when sender is UIButton
}
Run Code Online (Sandbox Code Playgroud)

我尝试将发送方更改为UIButton,但在上面标记的行上给出了此错误:

Cannot assign to 'inputView' in 'sender'
Run Code Online (Sandbox Code Playgroud)

我已经尝试研究它,似乎没有人对此有问题。有谁知道如何使用UIButton触发UIDatePicker inputView或任何可能无法让用户键入的更好的东西?谢谢!

Bri*_*ian 10

这是原始问题的数年后,但对于可能正在寻找解决方案的任何人,您都可以继承 UIButton 并为 inputView 属性提供 getter 和 setter。确保在 setter 中调用 becomeFirstResponder 并覆盖 canBecomeFirstResponder。例如:

class MyButton: UIButton {

    var myView: UIView? = UIView()
    var toolBarView: UIView? = UIView()
    
    override var inputView: UIView? {
        get {
            myView
        }
        
        set {
            myView = newValue
            becomeFirstResponder()
        }
    }

    override var inputAccessoryView: UIView? {
        get {
            toolBarView
        }
        set {
            toolBarView = newValue
        }
    }
    
    override var canBecomeFirstResponder: Bool {
       true
    }

}
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 0

您可以为选择器创建一个屏幕外视图,并在需要时将其移动到屏幕上。这是关于此的另一篇文章。