UIPicker作为UITextfield键盘的输入

王牌绿色

最初,我想在选择UITableViewCell或UILabel时实现选择器。

最好的方法是1.子类化UItextfield并将其inputView设置为选择器。2.使该文本字段成为didSelectRowAtIndexPath中的FirstResponder

在下面回答

王牌绿色

最好的做法是将UITextfield子类化,并执行以下操作:

class PickerTextField: UITextField, UIPickerViewDataSource, UIPickerViewDelegate {

    var picker:UIPickerView = CustomUIPickerView()

    var pickerHours: Int = 0
    var pickerMinutes: Int = 0
    var pickerSeconds: Int = 0
    var pickerTotal: Int = 0

    override func awakeFromNib() {
        super.awakeFromNib()

        picker.delegate = self
        picker.dataSource = self

    }

    override func layoutSubviews() {

        super.layoutSubviews()

        (pickerHours,pickerMinutes,pickerSeconds) = MakeTimeFromString(self.text!)

        self.inputView = configurePicker()
        self.inputAccessoryView = configureAccessoryView()


    }

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

        // Prevent textfield from editing
        return false

    }

    func configurePicker() -> UIView {

        picker.selectRow(pickerHours, inComponent: 0, animated: true)
        picker.selectRow(pickerMinutes, inComponent: 1, animated: true)
        picker.selectRow(pickerSeconds, inComponent: 2, animated: true)

        return picker

    }

    func configureAccessoryView() -> UIView {

        let inputAccessoryView = UIToolbar(frame: CGRectMake(0.0, 0.0, UIScreen.mainScreen().bounds.size.width, 44))
        inputAccessoryView.barStyle = UIBarStyle.BlackTranslucent

        let flex = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil)

        // Configure done button
        let doneButton = UIBarButtonItem()
        doneButton.title = "Done"
        doneButton.tintColor = UIColor.greenColor()
        doneButton.action = Selector("dismissPicker")

        inputAccessoryView.items = NSArray(array: [flex, doneButton]) as? [UIBarButtonItem]

        return inputAccessoryView
    }

    // Disallow selection or editing and remove caret

    override func caretRectForPosition(position: UITextPosition) -> CGRect {
        return CGRectZero
    }

    override func selectionRectsForRange(range: UITextRange) -> [AnyObject] {
        return []
    }

    override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {

        UIMenuController.sharedMenuController().menuVisible = false

        if action == "copy:" || action == "selectAll:" || action == "paste:" {
            return false
        }

        return super.canPerformAction(action, withSender:sender)
    }

    func dismissPicker () {

        self.resignFirstResponder()
    }

    //MARK: - UIPickerView Functions

    // returns the number of 'columns' to display.
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {

        return 3
    }

    // returns the # of rows in each component..
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        if component == 0 {

            return 24

        }

        return 60
    }

    func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {

        let title = String(row)
        let attributedString = NSAttributedString(string: title, attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])

        pickerView.backgroundColor = UIColor.clearColor()

        return attributedString
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        if component == 0 {

            pickerHours = row

        } else if component == 1 {

            pickerMinutes = row

        } else if component == 2 {

            pickerSeconds = row
        }

        pickerTotal = AssembleTimeFromComponents(pickerHours, minutesComponent: pickerMinutes, secondsComponent: pickerSeconds)

        UpdateLabel()

    }

    func UpdateLabel() {

        self.text = MakeTimeLabel(pickerTotal, type: "Routine")
        self.sizeToFit()

    }
}

对于更通用的库,请尝试:https : //github.com/gtsif21/UIKeyboardLikePickerTextField

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UITextField-仅允许数字和标点输入/键盘

来自分类Dev

将UIPicker选定的值插入UITextField

来自分类Dev

UITextField Swift中用于UIPicker的resignFirstResponder

来自分类Dev

切换键盘的UIPicker

来自分类Dev

将来自UITextField的用户输入作为float或double

来自分类Dev

SWIFT:不接受空格作为输入的UITextField扩展

来自分类Dev

输入类型作为自定义软键盘

来自分类Dev

UITextField键盘不消失

来自分类Dev

从键盘通知获取UITextField

来自分类Dev

UITextfield 更改键盘

来自分类Dev

自定义UIView(InfoWindow)中的UITextField-选择输入时键盘不显示

来自分类Dev

iOS7模拟器中的UITextField不会从Mac键盘获取任何输入

来自分类Dev

你如何在 UITextField 子类中拦截来自键盘的文本输入事件

来自分类Dev

如果输入键盘中断作为输入,执行将在哪里停止?

来自分类Dev

如何在“自定义键盘”中输入自定义字体作为输入

来自分类Dev

ImGui 同时使用“输入”和数字键盘“输入”作为 ImGuiKey_Enter

来自分类Dev

UITextField键盘返回按钮标题

来自分类Dev

在键盘iOS上方添加UITextField

来自分类Dev

要关闭UITextField键盘吗?

来自分类Dev

滑动即可关闭UITextField键盘

来自分类Dev

显示键盘时隐藏的UITextField

来自分类Dev

要关闭UITextField键盘吗?

来自分类Dev

UIPickerView作为UITextField的inputView

来自分类Dev

在UITextField swift 3.0中使用数字键盘以dd-MM-yyyy格式输入日期

来自分类Dev

Linux上的C ++:作为systemd服务运行时侦听键盘输入

来自分类Dev

如何使用键盘延音踏板作为计算机的输入?

来自分类Dev

ClaimedBarcodeScanner.DataReceived() 事件作为 WebView 控件 (UWP) 的键盘输入

来自分类Dev

以实用的方式连接到 HID 键盘设备作为 android 中的输入设备

来自分类Dev

UITextField输入金额

Related 相关文章

  1. 1

    UITextField-仅允许数字和标点输入/键盘

  2. 2

    将UIPicker选定的值插入UITextField

  3. 3

    UITextField Swift中用于UIPicker的resignFirstResponder

  4. 4

    切换键盘的UIPicker

  5. 5

    将来自UITextField的用户输入作为float或double

  6. 6

    SWIFT:不接受空格作为输入的UITextField扩展

  7. 7

    输入类型作为自定义软键盘

  8. 8

    UITextField键盘不消失

  9. 9

    从键盘通知获取UITextField

  10. 10

    UITextfield 更改键盘

  11. 11

    自定义UIView(InfoWindow)中的UITextField-选择输入时键盘不显示

  12. 12

    iOS7模拟器中的UITextField不会从Mac键盘获取任何输入

  13. 13

    你如何在 UITextField 子类中拦截来自键盘的文本输入事件

  14. 14

    如果输入键盘中断作为输入,执行将在哪里停止?

  15. 15

    如何在“自定义键盘”中输入自定义字体作为输入

  16. 16

    ImGui 同时使用“输入”和数字键盘“输入”作为 ImGuiKey_Enter

  17. 17

    UITextField键盘返回按钮标题

  18. 18

    在键盘iOS上方添加UITextField

  19. 19

    要关闭UITextField键盘吗?

  20. 20

    滑动即可关闭UITextField键盘

  21. 21

    显示键盘时隐藏的UITextField

  22. 22

    要关闭UITextField键盘吗?

  23. 23

    UIPickerView作为UITextField的inputView

  24. 24

    在UITextField swift 3.0中使用数字键盘以dd-MM-yyyy格式输入日期

  25. 25

    Linux上的C ++:作为systemd服务运行时侦听键盘输入

  26. 26

    如何使用键盘延音踏板作为计算机的输入?

  27. 27

    ClaimedBarcodeScanner.DataReceived() 事件作为 WebView 控件 (UWP) 的键盘输入

  28. 28

    以实用的方式连接到 HID 键盘设备作为 android 中的输入设备

  29. 29

    UITextField输入金额

热门标签

归档