2017-02-23 2 views
1

У меня есть выбор даты Я использую, чтобы установить значение текстового поля. Он отлично работает, за исключением того, что он работает только во второй раз, когда я нажимаю текстовое поле, то есть при первом нажатии на текстовое поле отображается стандартная клавиатура. Затем, если я выхожу из текстового поля и обратно в него, он показывает дату. Я пробовал разные варианты, но он либо не работает вообще, либо я получаю ту же проблему. Это, как я поставил его:Выбор даты работает только после нажатия текстового поля

class ExpDateTableViewCell: UITableViewCell, UITextFieldDelegate { 


@IBOutlet weak var textField: UITextField! 


@IBAction func textFieldEditing(sender: UITextField) { 

    let datePickerView:UIDatePicker! = UIDatePicker() 

    datePickerView.datePickerMode = UIDatePickerMode.date 

    sender.inputView = datePickerView 

    datePickerView.addTarget(self, action: #selector(ExpDateTableViewCell.datePickerValueChanged), for: UIControlEvents.valueChanged) 
} 

func datePickerValueChanged(sender:UIDatePicker) { 

    let dateFormatter = DateFormatter() 

    dateFormatter.dateStyle = DateFormatter.Style.medium 

    dateFormatter.timeStyle = DateFormatter.Style.none 
    textField.text = dateFormatter.string(from: sender.date) 


} 


override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

} 
+0

вы должны использовать текстовое поле? Вы не можете заменить его ярлыком или кнопкой? – jo3birdtalk

ответ

0

Проблема этот код:

@IBAction func textFieldEditing(sender: UITextField) { 
    // ... 
    sender.inputView = datePickerView 
} 

Вы не настройки текстового поля inputView с точки зрения сборщика до после в первый раз мы начали редактирования. Таким образом, мы получим эффект, который вы правильно описали: второй время, которое мы редактируем, имеется представление выбора.

Вам нужно установить текстовое поле inputView гораздо раньше, например, в awakeFromNib, перед тем пользователя имеет возможность редактировать текстовое поле в первый раз.

+0

Большое спасибо, Мэтт. Это имеет большой смысл. Однако, можете ли вы рассказать мне, как я могу ссылаться на «datePickerView» вне функции ... поскольку он объявляется внутри функции –

+0

Очевидно, дело в том, что вам нужно переместить _all_ код, который настраивает текстовое поле 'inputView' для в какой-то более ранний момент времени. – matt

+0

А, спасибо! Сейчас очень очевидно, что я думаю об этом –

0

Сначала сделайте UIDatepickerview как inputview для TextField

Добавьте этот код в текстовое поле действия

@IBAction func textFieldEditing(sender: UITextField) { 
let datePickerView:UIDatePicker = UIDatePicker() 
datePickerView.datePickerMode = UIDatePickerMode.Date 
sender.inputView = datePickerView 
datePickerView.addTarget(self, action: #selector(ViewController.datePickerValueChanged), forControlEvents: UIControlEvents.ValueChanged) 

}

Смежные вопросы