Frage

Ich möchte ein UIPickerView zeigen auf FirstResponder eines UITextField nicht die Tastatur zu werden und den Wert im Textfeld bilden die Picker-Ansicht füllen.

einer weiß das?

War es hilfreich?

Lösung

Edit: diese Antwort zum Zeitpunkt der Veröffentlichung korrekt war. Apple hat inputView seit eingeführt. Mafonya beantworten ist, was sollten Sie heute tun.

Es ist möglich, die Tastatur von Aufspringen zu verhindern. Legen Sie Ihre Klasse, um die Delegierten des UITextField zu sein: textField.delegate = self und fügt: <UITextFieldDelegate> nach dem Interface-Deklaration (vor dem {) in der Header-Datei.

Jetzt implementieren textFieldShouldBeginEditing::

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

    return NO;
}

Wenn Sie diese Methode verstecken Sie Ihre picker in der Lage sein wollen, wird nicht funktionieren. Was Sie tun können, ist dann Unterklasse der UITextField erstellen und die *trackingWithTouch:event: Selektoren außer Kraft setzen und in denen Ihre Magie tun. Sie müssen wahrscheinlich noch NO von textFieldShouldBeginEditting: zurückzukehren, um die Tastatur zu verhindern, zeigt.

Andere Tipps

Verwenden Sie [Textfeld setInputView: picker];

Ersetzen der Systemeingang Ansichten
inputView
  inputAccessoryView

Hey, ich habe in einigen Code eingefügt schrieb ich eine Weile zurück, um dieses Szenario zu decken. Es gibt zwei Beispiele eines mit actionsheet und eine ohne 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)];

}

Dies ist der Code, ohne die 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];

}

Ein detaillierteres Beispiel hierfür finden Sie unter: http://www.buggyprogrammer.co.uk/2010/08/18/open-uipickerview-when-user-enters-textfield/

hinzufügen inputview zu textfield.

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

MyTextField.inputView = picker;

Sie den Code Schauen Sie sich an (es ist beides Textview + Tabbar und picker + Tabbar Code)

UITextView und UIPickerView mit einem eigenen UIToolbar

Dies erhält den picker zum Rücktritt etc. All u dann tun müssen, ist die picker delegieren Methode verwenden, um die Textansicht zu aktualisieren

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

Statt ein Textfeld zu verwenden, verwenden Sie eine UILabel, mit einem weißen Hintergrund. Auf diese Weise wird die Tastatur nicht angezeigt, wenn Sie es tippen. das berührte Ereignisses auf der UILabel außer Kraft setzen, wenn dass das Verfahren geschieht rufen Sie die privious Frage bilden, der die neue Ansicht angezeigt wird.

 -(void) addToViewWithAnimation:(UIView *) theView
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top