Для этого вы можете использовать inputView
и inputAccessoryView
свойства текстового поля.Создайте средство выбора даты и установите для него входные представления двух текстовых полей.Также создайте другое представление для кнопки Done
и ее как дополнительного вида.Эта кнопка понадобится вам, чтобы закрыть окно ввода.
Кнопка Done
должна быть подключена к функции, которая в основном делает это -
if ( [textField1 isFirstResponder] ) {
[textField1 resignFirstResponder];
} else if ( [textField2 isFirstResponder] ) {
[textField2 resignFirstResponder];
}
Другой вариант - создать подкласс UITextField
и переопределить inputView
и inputAccessoryView
.Это путь, когда их много.
Пример
@interface CustomKeyboardAppDelegate : NSObject <UIApplicationDelegate> {
...
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITextField *textField;
@property (nonatomic, retain) IBOutlet UIToolbar *accessoryView;
@property (nonatomic, retain) IBOutlet UIDatePicker *customInput;
- (IBAction)dateChanged:(id)sender;
- (IBAction)doneEditing:(id)sender;
@end
В XIB вытащите UIToolbar
и UIDatePicker
но не прикрепляйте это к представлению.Подключите розетки соответствующим образом.dateChanged:
реагирует на изменения в средстве выбора даты, а doneEditing:
вызывается при нажатии кнопки Done
на панели инструментов.Подключите их тоже.Методы реализованы, как указано ниже.
@implementation CustomKeyboardAppDelegate
@synthesize window=_window;
@synthesize textField = _textField;
@synthesize accessoryView = _accessoryView;
@synthesize customInput = _customInput;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.textField.inputView = self.customInput;
self.textField.inputAccessoryView = self.accessoryView;
...
}
...
- (IBAction)dateChanged:(id)sender {
UIDatePicker *picker = (UIDatePicker *)sender;
self.textField.text = [NSString stringWithFormat:@"%@", picker.date];
}
- (IBAction)doneEditing:(id)sender {
[self.textField resignFirstResponder];
}
@end
Последние два метода будут раздуты, поскольку больше текстовых полей зависит от этого средства выбора.