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

Другие вопросы по тегам