Как я могу отображать элемент управления datetimepicker при нажатии на текстовое поле?
У меня есть пользовательский интерфейс с текстовыми полями прибытия и отправления, и когда пользователь нажимает на текстовое поле прибытия, он должен вызывать элемент управления datetimepicker вместо клавиатуры, то же самое с текстовым полем отъезда.
Для этого вы можете использовать свойства 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
Последние два метода будут раздуты, так как больше текстовых полей зависит от этого средства выбора.
Очень просто, в ViewController.h
поставить UITextFieldDelegate
после viewDidLoad
.
txtFecha.delegate = self;
datePicker = [[UIDatePicker alloc]init];
[datePicker setDatePickerMode:UIDatePickerModeDate];
self.txtFecha.inputView = datePicker;
В viewDidLoad из ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged];
[txtFieldBranchYear setInputView:datePicker];
}
Добавить один метод в свой ViewController
-(void) dateTextField:(id)sender
{
UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView;
[picker setMaximumDate:[NSDate date]];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSDate *eventDate = picker.date;
[dateFormat setDateFormat:@"dd/MM/yyyy"];
NSString *dateString = [dateFormat stringFromDate:eventDate];
txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString];
}
txtFieldBranchYear является выходом UITextField
Есть действительно полезный класс, который я нашел - сообщение в блоге здесь: http://www.pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/ , но в основном он также использует представление inputView / inputAccessory. Главное, что UILabel, по крайней мере, из-за того, что я делал, был именно тем, что мне было нужно.
откройте средство выбора даты при нажатии на textField swift 3.0, добавьте UITextFieldDelegate и установите делегата для ViewDidload ()