2015-11-03 61 views
2

现在我有一个带有文本字段的视图控制器。将UIDatePicker与UITextField结合使用,不带文本区域编辑

当我点击进入文本字段时,会显示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?

+0

你为什么不使用'UILabel',而不是一个文本框的? – Aaron

+1

因为UILabel没有inputView – LastMove

+0

如果你打算限制所有的输入到日期选择器,那么你不需要输入文本的功能。您可以将点按手势添加到标签,并让日期选择器选择填充标签的文本。 – Aaron

回答

2

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

由于仅当用户输入文本时才调用此方法(而不是在以编程方式设置时),所以您可以仅返回false。

希望它有帮助:)

0

感谢您的回答。

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

在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) 
相关问题