Приложение для iPhone: UIDatePicker для двух текстовых полей в одном представлении

UIPickerView выбрать и скрыть

Я использовал это, чтобы открыть окно выбора даты, когда я «прикасаюсь» к текстовому полю. То есть мне нужно, чтобы текстовое поле отображало все, что я выбираю в представлении выбора даты, как его содержимое.

 - (IBAction)showPicker:(id)sender {

    // create a UIPicker view as a custom keyboard view
    UIDatePicker* pickerView = [[UIDatePicker alloc] init];
    [pickerView sizeToFit];
    pickerView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    //pickerView.delegate = self;
    //pickerView.dataSource = self;
    //pickerView.showsSelectionIndicator = YES;
    self.datePickerView = pickerView;  //UIDatePicker



    fromDate.inputView = pickerView;



    // create a done view + done button, attach to it a doneClicked action, and place it in a toolbar as an accessory input view...
    // Prepare done button
    UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
    keyboardDoneButtonView.barStyle = UIBarStyleBlack;
    keyboardDoneButtonView.translucent = YES;
    keyboardDoneButtonView.tintColor = nil;
    [keyboardDoneButtonView sizeToFit];

    UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                    style:UIBarButtonItemStyleBordered target:self
                                                                   action:@selector(pickerDoneClicked:)] autorelease];

    fromDate.text = (NSString *)datePickerView.date; // fromDate is the Text Field outlet, where I am trying to display the selection on the picker.

    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];

    // Plug the keyboardDoneButtonView into the text field...
    fromDate.inputAccessoryView = keyboardDoneButtonView;  

    [pickerView release];
    [keyboardDoneButtonView release];
     }

    - (IBAction)pickerDoneClicked:(id)sender {

        [fromDate resignFirstResponder];
    }

Изменить: я могу сделать это для одного текстового поля на экране. Несмотря ни на что, всплывает только клавиатура для второго текстового поля.

Есть идеи сделать это для второго текстового поля?


person esh    schedule 17.07.2012    source источник


Ответы (2)


fromDate.inputView = pickerView;

Эта строка кода заставляет средство выбора просматривать входное представление для поля fromDate. Вам нужен аналогичный код для другого поля даты. Вам также необходимо установить входной аксессуар в другом поле.

Создание специального метода для этого и сенсорных действий во всех ваших текстовых полях — ненужная работа. Просто создайте представление выбора и панель инструментов в viewDidLoad и назначьте их представлениям ввода и вспомогательным представлениям любых полей, в которых вы хотите их использовать. Текстовые поля уже имеют метод касания, который вызовет клавиатуру.

person jrturton    schedule 17.07.2012
comment
Кроме того, я проверил входной аксессуар. - person esh; 17.07.2012
comment
Я даже пытался установить другой объект pickerView и использовать его для второго текстового поля. Не очень умно, но я хочу, чтобы это работало. - person esh; 17.07.2012
comment
Тогда ваше значение toDate может быть нулевым. Розетка подключена? - person jrturton; 17.07.2012
comment
Думаю, вы не поняли, что я хотел сказать. Я не могу открыть UIDatePicker для второго текстового поля в том же представлении, как и для первого поля. - person esh; 17.07.2012
comment
О, подождите, откуда вызывается showPicker:? Вы должны устанавливать входные представления и т. д. в viewDidLoad, а не из действия. - person jrturton; 17.07.2012
comment
Он вызывается по событию Touch Down из текстового поля. Теперь у меня есть showPicker: и showToDatePicker:, которые запускаются из второго текстового поля. - person esh; 17.07.2012
comment
Код в viewDidLoad: datePickerView = [[UIDatePicker alloc] init]; [datePickerView sizeToFit]; datePickerView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); fromDate.inputView = datePickerView; toDate.inputView = datePickerView; Он по-прежнему не отображает представление UIDatePicker для toDate. - person esh; 17.07.2012

Просто альтернативное решение вашей проблемы.

1) Поместите пользовательское UIButton над текстовым полем, при касании которого вы хотите отобразить UIDatePickerView

2) установите для делегата текстового поля значение nil, на котором вы хотите отобразить представление выбора.

fromDate.delegate = nil;

3) на IBAction ("прикоснуться") этой пользовательской кнопки напишите следующий код: -

- (IBAction) customButtonAction: (id) sender
{
    [_previousTextField resignFirstResponder]; // The instance of last textfield tapped.

    [self showDatePicker];
}

4) При нажатии кнопки «Готово» в представлении Picker установите выбранное значение в текстовое поле.

- (IBAction)pickerDoneClicked:(id)sender 
   {
      fromDate.text = @"value from UIPickerView's selected row"
   }
person Slim Shaddy    schedule 17.07.2012