Подтвердить что ты не робот

Показывать datepicker в текстовом поле

Я очень новичок в iOS, поэтому, очевидно, я пропустил несколько концепций, пытаясь выполнить это решение Показывать datepicker при нажатии на текстовое поле для моей проблемы.

У меня есть интерфейс и реализация в классе DatepickerAppDelegate, но я потерялся здесь:

"В XIB вытащите UIToolbar и UIDatePicker, но не прикрепляйте их к виду. Соответственно подключайте выходы. dateChanged: отвечает на изменения в наборе дат и doneEditing: вызывается, когда кнопка" Готово "в нажимается панель инструментов. Соединяйте их тоже. Методы реализованы, как указано ниже."

Я читал что-то о XIB, но я использую раскадровку, поэтому я думаю, что у меня ее нет. Кроме того, я не уверен, как я должен вытаскивать элементы, не привязывая их к моим контроллерам вида (я пытаюсь, но когда я отпускаю кнопку мыши, инструмент возвращается на панель инструментов), и я не уверен, t даже понимаю, зачем мне UIToolbar.

И, наконец, как мне связать свое текстовое поле с делегатом datepicker?

Может кто-нибудь мне помочь?

ОБНОВЛЕНИЕ:

На самом деле это очень просто, мне просто нужно:

datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

self.birthday.inputView = datePicker;
4b9b3361

Ответ 1

UIResponder, из которого наследуется UITextField, определяет свойство, называемое inputView. Это свойство (a UIView *) может определять представление, которое будет отображаться вместо клавиатуры, когда этот UIResponder станет первым ответчиком.

Таким образом, если вы хотите, чтобы UIDatePicker появлялся при нажатии в текстовом поле (т.е. вы делаете этот textField первым ответчиком), вы можете сказать наивно:

UIDatePicker *datePicker = [[UIDatePicker alloc] init...];
... configure datePicker ...

[myTextField setInputView:datePicker];

Теперь, когда вы нажмете UITextField, вместо него будет поднят UIDatePicker.

ОДНАКО

Вам нужно сделать больше, чем это, потому что вам нужно будет обрабатывать разные ориентации и разные идиомы.

Но основная идея.

(И если вы хотите панель инструментов над UIDatePicker, то что для свойства inputAccessoryView для...)

Ответ 2

В представленииDidLoad 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

Ответ 3

Добавьте представление вида datepicker и uitoolbarview к вашему представлению. Например

CGFloat toolbarHeight = 44.f;
CGFloat datePickerHeight = 140.f;
CGFloat containerViewHeight = toolbarHeight+datePickerHeight;
//create container view for datepicker and toolbar
UIView *containerView = [[UIVIew alloc] initWithFrame:CGRectMake(0.f, [self.view bounds].size.height+containerViewHeight, [self.view bounds].size.width, containerViewHeight)];

//after init toolbar set the frame
toolBar.frame = CGRectMake(0.f,0.f,containerView.frame.size.width, toolbarHeight];
//then add on toolbar button save and release it after add

//after init datePicker set the frame
datePicker.frame = CGRectMake(0.f, toolbarHeight, containerView.frame.size.width, datePickerHeight);

//add datePicker and toolBar to containerView
[containerView addSubview: toolBar];
[containerView addSubview: datePicker];

[toolBar release];
[datePicker release];

//add containerView to main view

[self.view addSubview: containerView];
[containerView release];

Таким образом, когда вид загрузился, они будут скрыты. Y из вида коннектора находится вне рамки вашего представления.

Теперь вам нужно назначить делегат свойства UITextFieldDelegate

textfield.delegate = self;

В методе делегата textFieldDidBeginEditing см. UITextFieldDelegate вы должны запустить метод, который покажет вашу датуPicker и панель инструментов, Если у вас есть много текстовых полей, чтобы определить, какой из них выбран, используйте свойство тег, которое является целым числом, и вы можете использовать переключатель вместо многих условий , если.

Чтобы показать дату и панель инструментов, вы должны изменить Y рамки containerView. Вот как это сделать

CGRect containerViewFrame = containerView.frame;
containerViewFrame.y -=containerViewHeight;
containerView.frame = containerViewFrame;

Чтобы скрыть только переменную containerViewHeight. Вы можете использовать UIViewAnimations, чтобы показать его с некоторой анимацией. Например UIViewAnimationCurveEaseInOut