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];
У меня вопрос: можно ли обработать действие по кнопке "ОК", чтобы заполнить поле "Дата исчезновения"?
РЕДАКТИРОВАТЬ:
Для тех, кто хочет знать, как я решил свою проблему:
в моем .h я импортировал
IQDropDownTextField.h
:#import "IQDropDownTextField.h"
в .h, я изменил тип моего
UITextField
вIQDropDownTextField
:@property (weak, nonatomic) IBOutlet IQDropDownTextField *myTextField;
выберите свое поле в Интерфейсном Разработчике или в.xib и покажите Инспектора Идентификации: измените класс своего поля на
IQDropDownTextField
,
Примечание согласно комментарию Мохда Ифтехара Кураши: двух следующих пунктов можно избежать с помощью следующего кода:
// Set myTextField's 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's 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'
, для "как использовать?" пожалуйста, обратитесь 'TextFieldViewController.m
".