как показать окно выбора в uitextfield, а не на клавиатуре? - PullRequest
9 голосов
/ 25 мая 2009

Я хочу показать UIPickerView, став первым FirstResponder поля UIText, а не клавиатуры, и заполнить значение в текстовом поле из представления выбора.

Кто-нибудь знает это?

Ответы [ 5 ]

28 голосов
/ 20 апреля 2012

Использовать [текстовое поле setInputView: pickerView];

Замена системных входных представлений
inputView
inputAccessoryView

25 голосов
/ 25 мая 2009

Редактировать: этот ответ был верным на момент написания. С тех пор Apple представила inputView. Мафоня ответ это то, что вы должны делать в настоящее время.

Можно предотвратить появление клавиатуры. Установите ваш класс в качестве делегата UITextField: textField.delegate = self и добавьте: <UITextFieldDelegate> после объявления вашего интерфейса (перед {) в заголовочном файле.

Теперь реализуем textFieldShouldBeginEditing::

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    // Show UIPickerView

    return NO;
}

Если вы хотите иметь возможность скрыть свой pickerView, этот метод не будет работать. Тогда вы можете создать подкласс UITextField, переопределить селекторы *trackingWithTouch:event: и поработать над ними. Вам, вероятно, все еще нужно вернуть NO из textFieldShouldBeginEditting:, чтобы не показывать клавиатуру.

4 голосов
/ 16 декабря 2012

добавить входной вид в textField.

picker = [[UIPickerView alloc]init];
[picker setDataSource:self];
[picker setDelegate:self];
[picker setShowsSelectionIndicator:YES];

MyTextField.inputView = picker;
4 голосов
/ 30 сентября 2010

Эй, я вставил код, который написал некоторое время назад, чтобы описать этот сценарий. Есть два примера, один с листом действий, а другой без листа действий:

- (void)textFieldDidBeginEditing:(UITextField *)myTextField{

             [myTextField resignFirstResponder];

             actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

             [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

             CGRect pickerFrame = CGRectMake(0, 40, 0, 0);

             UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];

              pickerView.showsSelectionIndicator = YES;

              pickerView.dataSource = self;

              pickerView.delegate = self;

              [actionSheet addSubview:pickerView];

              [pickerView release]; //NB this may result on the pickerview going black the next time you come back to the textfield, if this is the case just remove this statement

              UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:NSLocalizedString(@"SUBMIT", @"")]];

              closeButton.momentary = YES;

               closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);

               closeButton.segmentedControlStyle = UISegmentedControlStyleBar;

               closeButton.tintColor = [UIColor blackColor];

               [closeButton addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged];

               [actionSheet addSubview:closeButton];

               [closeButton release];

               [actionSheet showInView:displayedInView];

               [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];

}

Это код без таблицы действий:

- (void)textFieldDidBeginEditing:(UITextField *)myTextField{

         [myTextField resignFirstResponder];

          for (int component = 0;  component &lt; (((NSInteger)numberOfComponentsForPickerView) - 1); component++) {

              NSInteger valueForRow = [[self.textField.text substringWithRange:NSMakeRange(component,1)] integerValue];

               [pickerView selectRow:valueForRow inComponent:component animated:YES];

          }

           [self fadeInPickerView];

            [view addSubview:pickerView];

            [pickerView release];

}

Более подробный пример этого можно найти по адресу: http://www.buggyprogrammer.co.uk/2010/08/18/open-uipickerview-when-user-enters-textfield/

1 голос
/ 25 мая 2009

Проверьте код в (есть и textview + tabbar и pickerview + tabbar code)

UITextView и UIPickerView со своей собственной панелью UIToolbar

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

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

Вместо использования текстового поля используйте UIlabel с белым фоном. Таким образом, клавиатура не будет отображаться при нажатии. переопределите событие touch в UILabel, когда это произойдет, вызовите метод из основного вопроса, который отобразит новое представление.

 -(void) addToViewWithAnimation:(UIView *) theView
...