Отображение даты выбора при нажатии на текстовое поле - PullRequest
24 голосов
/ 20 мая 2011

Как отобразить элемент управления datetimepicker при нажатии текстового поля?

У меня есть пользовательский интерфейс с текстовыми полями прибытия и отправления, и когда пользователь нажимает на текстовое поле прибытия, он должен вызывать элемент управления datetimepicker вместо клавиатуры и то же самое с текстовым полем вылета.

Ответы [ 5 ]

42 голосов
/ 20 мая 2011

Для этого вы можете использовать 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

Последние два метода будут раздуты, поскольку больше текстовых полей зависит от этого средства выбора.

11 голосов
/ 05 декабря 2012

Очень просто, в ViewController.h поставить UITextFieldDelegate после в viewDidLoad.

txtFecha.delegate = self;

datePicker = [[UIDatePicker alloc]init];
[datePicker setDatePickerMode:UIDatePickerModeDate];

self.txtFecha.inputView = datePicker;
3 голосов
/ 25 ноября 2014

В 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

1 голос
/ 11 апреля 2013

Я нашел действительно полезный класс - сообщение в блоге здесь: http://www.pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/, но он также в основном использует представление inputView / inputAccessory.Главное, что UILabel, по крайней мере, из-за того, что я делал, был именно тем, что мне было нужно.

0 голосов
/ 27 июня 2017

открыть дату выбора по нажатию на textField swift 3.0 добавить UITextFieldDelegate и установить делегата на ViewDidload () tfDate.delegate = self

//MARK:- TextField Delegate
//MARK:-

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}

//MARK:- DatePicker
//MARK:-

func textFieldDidBeginEditing(_ textField: UITextField) {
     self.callDatePicker(textField: tfDate)
}
func callDatePicker(textField:UITextField){
    let datePickerView  : UIDatePicker = UIDatePicker()
    datePickerView.datePickerMode = UIDatePickerMode.date
    textField.inputView = datePickerView
    datePickerView.addTarget(self, action: #selector(MyViewController.handleDatePicker), for: .valueChanged)
}

var str:String = ""
var str1:String = ""
var strStartDate:Date!
var strEndDate:Date!

func handleDatePicker(sender: UIDatePicker) {

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"
    print("Date :: \(dateFormatter.string(from: sender.date))")
    tfDate.text = dateFormatter.string(from: sender.date)


}
...