将UIDatePicker与UITextField一起使用而不进行文本字段编辑

问题描述 投票:2回答:2

现在我有一个带文本字段的视图控制器。

当我单击文本字段时,将显示UIDatePicker而不是普通键盘。

在UIDataPicker中选择日期/时间,更新文本字段。

这是我的代码:

@IBAction func fieldValueEditingDidBegin(sender: UITextField) {
    if self.dateTimeEdit {
      let datePickerView:UIDatePicker = UIDatePicker()
      datePickerView.datePickerMode = UIDatePickerMode.DateAndTime
      sender.inputView = datePickerView
      datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
    }
  }


  func datePickerValueChanged(sender:UIDatePicker) {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
    dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle

    fieldValueTextField.text = dateFormatter.stringFromDate(sender.date)
    doneBarButtonItem.enabled = true
  }

我想阻止用户在UITextField中输入其他文本(例如使用外部键盘或粘贴字符串)

是否可以强制使用UIDataPicker并阻止在UITextField中输入?

ios swift
2个回答
2
投票

一个简单的解决方法:您可以使用shouldChangeCharactersInRange UITextfieldDelegate方法。

由于此方法仅在用户输入文本时调用(而不是以编程方式设置),因此只能返回false。

希望能帮助到你 :)


0
投票

谢谢你的回答。

我终于使用标签解决了我的问题,并在tableview didSelectRowAtIndexPath事件中显示datetimepicker。

在viewDidLoad中

popDatePickerFechaInicio = PopDatePicker(forLabelField: fechaInicioLabel)

并在tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath)中

let initDate = self.fechaInicioLabel.text?.ToDateFromDateTimeShort() ?? NSDate()
let dataChangedCallback : PopDatePicker.PopDatePickerCallback = { (newDate : NSDate, forLabelField : UILabel) -> () in
     forLabelField.text = (newDate.ToDateTimeShortString() ?? "?") as String
        }
popDatePickerFechaInicio!.pick(self, initDate: initDate, dataChanged: dataChangedCallback)
© www.soinside.com 2019 - 2024. All rights reserved.