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 > .