2009-05-25 3 views

ответ

25

Edit: этот ответ был правильным в момент написания. С тех пор Apple представила inputView. Mafonya answer - это то, что вы должны делать сейчас.

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

Теперь реализовать textFieldShouldBeginEditing::

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

    return NO; 
} 

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

+1

ваше решение работает частично. Я хочу показать вид подборщика на некоторых определенных полях uitext не во всех текстовых полях, а также когда значение выбрано из представления выбора, заполненного нужным текстовым полем, представление сборщика должно быть скрыто. –

1

Заканчивать код на (есть и TextView + TabBar и pickerview + код TabBar)

UITextView and UIPickerView with its own UIToolbar

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

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

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

-(void) addToViewWithAnimation:(UIView *) theView 
+0

я не хочу клавиатуры, чтобы показать только вид сборщика, я хочу, чтобы отображаться, когда я вхожу в текстовом поле –

+0

да клавиатура будет почти всегда отображаться. вам придется использовать другой вид, такой как uiLabel. Я отредактировал ответ, чтобы быть более кратким. – Bluephlame

+0

Как отметил Синий, клавиатура всегда будет отображаться, и вы не сможете ее избежать.Другой альтернативой было бы добавить представление выбора на клавиатуре. Они имеют одинаковую высоту, поэтому клавиатура не будет видна. – lostInTransit

4

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

- (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)]; 

} 

Это код без actionsheet:

- (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/

28

Используйте [textfield setInputView: pickerView];

Замена системы ввода Views
inputView
inputAccessoryView

+7

Это правильный ответ для тех, кто знает, что они делают. –

+0

Согласен, это правильный ответ. –

+1

Вы, ребята, знаете о быстрой реализации этого? – kareem

4

добавить inputview в TextField.

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

MyTextField.inputView = picker; 
+0

спасибо! он работает для меня, но как скрыть сборщик, когда мы сделаем выбор? Большое спасибо – 2013-12-23 15:56:31

+0

Работал для меня. благодаря –

Смежные вопросы