IQKeyboardManager с UIDatePicker
Я реализовал инфраструктуру IQKeyboardManager, чтобы упростить управление клавиатурой. Он работает очень хорошо, за исключением одного:
В моем приложении есть несколько элементов UItextField
, которые открывают UIDatePicker
вместо клавиатуры по умолчанию (например, цифровой клавиатуры, десятичной клавиатуры, ASCII и т.д.).
Здесь пример кода с графическим результатом:
// Create the datePicker
UIDatePicker *birthdayDatePicker = [UIDatePicker new];
[birthdayDatePicker setDatePickerMode:UIDatePickerModeDate];
// Assign the datePicker to the textField
[myTextField setInputView:birthdayDatePicker];
Мой вопрос:
Можно ли обработать действие на кнопке "ОК", чтобы заполнить поле "Дата де весточки"?
![enter image description here]()
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
}
Ответы
Ответ 1
Теперь вы можете добавить настраиваемый селектор (см. 'IQUIView+IQKeyboardToolbar.h'
) для previous/next/done
, чтобы получить уведомление. Обратите внимание, что пользовательский селектор не влияет на собственную функциональность previous/next/done
, он используется только для целей обратного вызова. Подробную документацию см. 'IQUIView+IQKeyboardToolbar.h'
, как использовать? см. <<24 > .