13

当用户点击 UIButton 时,我试图让 UIDatePicker 作为键盘出现。我能够让它与文本字段一起工作,但我不喜欢光标的可见方式,如果用户有外部键盘,他们可以输入任何文本。这是我的代码:

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

我尝试将发件人更改为 UIButton 但它在上面标记的行上给出了这个错误:

Cannot assign to 'inputView' in 'sender'

我已经尝试过研究它,但似乎没有其他人对此有任何疑问。任何人都知道如何使用 UIButton 触发 UIDatePicker inputView 或用户无法输入的任何可能效果更好的东西?谢谢!

4

4 回答 4

11

This is years after the original question, but for anyone who may be looking for solution to this you can subclass UIButton and provide a getter and setter for the inputView property. Be sure to call becomeFirstResponder in the setter and override canBecomeFirstResponder. For example:

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
    }

}
于 2018-02-13T10:14:04.320 回答
4
let tempInput = UITextField( frame:CGRect.zero )
tempInput.inputView = self.myPickerView       // Your picker
self.view.addSubview( tempInput )
tempInput.becomeFirstResponder()

保留参考是个好主意,tempInput这样您就可以在关闭时进行清理

于 2017-05-31T05:34:32.607 回答
3

我想做同样的事情,我最终只是在按钮上覆盖了一个 UITextField 并使用了 inputView 。

提示:设置tintColorUITextFieldUIColor.clearColor()来隐藏光标。

于 2016-03-16T08:06:24.277 回答
0

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

于 2015-07-11T21:23:35.423 回答