Я реализовал инфраструктуру IQKeyboardManager, чтобы упростить управление клавиатурой. Он работает очень хорошо, за исключением одного:
В моем приложении есть несколько элементов UItextField
, которые открывают UIDatePicker
вместо клавиатуры по умолчанию (например, цифровой клавиатуры, десятичной клавиатуры, ASCII и т.д.).
Здесь пример кода с графическим результатом:
// Create the datePicker
UIDatePicker *birthdayDatePicker = [UIDatePicker new];
[birthdayDatePicker setDatePickerMode:UIDatePickerModeDate];
// Assign the datePicker to the textField
[myTextField setInputView:birthdayDatePicker];
Мой вопрос: Можно ли обработать действие на кнопке "ОК", чтобы заполнить поле "Дата де весточки"?
EDIT:
Для тех, кто хочет знать, как я решил свою проблему:
-
в моем .h, я импортировал
IQDropDownTextField.h
:#import "IQDropDownTextField.h"
-
в .h, я изменил тип моего
UItextField
наIQDropDownTextField
:@property (weak, nonatomic) IBOutlet IQDropDownTextField *myTextField;
-
выберите свое поле в Interface Builder или в вашем .xib и покажите Identity Inspector: измените свой класс полей на
IQDropDownTextField
.
Обратите внимание на комментарий Mohd Iftekhar Qurashi: следующие две точки можно избежать с помощью следующего кода:
// Set myTextField dropDownMode to IQDropDownModeDatePicker
myTextField.dropDownMode = IQDropDownModeDatePicker;
// Create a dateFormatter
NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:@"dd/MM/yyyy"];
// Assign the previously created dateFormatter to myTextField
myTextField.dateFormatter = df;
// Assign a minimum date and/or maximum date if you want
myTextField.minimumDate = [NSDate date];
myTextField.maximumDate = [NSDate date];
// That all !
-
в .m, я добавил метод
setCustomDoneTarget:action:
:// Create the datePicker UIDatePicker *birthdayDatePicker = [UIDatePicker new]; [birthdayDatePicker setDatePickerMode:UIDatePickerModeDate]; // Assign the datePicker to the textField [myTextField setInputView:birthdayDatePicker]; // Just added this line [myTextField setCustomDoneTarget:self action:@selector(doneAction:)];
-
в .m, я добавил метод
doneAction:
:- (void)doneAction:(UITextField *)textField { [myTextField setText:[DateHelper getStringFromDate:birthdayDatePicker.date format:@"dd/MM/yyyy" useGmt:NO]]; // getStringFromDate:format:useGmt: is a method to convert a NSDate to a NSString according to the date format I want }