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

时间:2015-07-11 20:42:30

标签: ios swift uibutton inputview

当用户点击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 个答案:

答案 0 :(得分:3)

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

提示:将UITextField的tintColor设置为UIColor.clearColor()以隐藏光标。

答案 1 :(得分:3)

let tempInput = UITextField( frame:CGRect.zero )
tempInput.inputView = self.myPickerView       // Your picker
self.view.addSubview( tempInput )
tempInput.becomeFirstResponder()

保留对tempInput的引用是个好主意,以便您可以在关闭时进行清理

答案 2 :(得分:3)

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

class MyButton: UIButton {

    var myView = UIView()
    var toolBarView = UIView()

    override var inputView: UIView {
        get {
            return self.myView
        }

        set {
            self.myView = newValue
            self.becomeFirstResponder()
        }
    }

    override var inputAccessoryView: UIView {
        get {
            return self.toolBarView
        }
        set {
            self.toolBarView = newValue
        }
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }

}

答案 3 :(得分:0)

您可以为选择器关闭屏幕视图创建视图,并在需要时将其移动到屏幕上。这是another的帖子。