2016-05-06 8 views
-2

Ich bin neu in IOS ich möchte mehrere Textfelder mit nur einem Picker progamatisch erstellen. Angenommen, ich brauche fünf Textfelder bedeutet, wenn ich geklickt habe erste Textfeld-Picker-Ansicht kann das erste Array laden, dann gehe ich zum zweiten Textfeld bedeutet Picker-Ansicht kann zweite Array automatisch laden und geht bis zum letzten Feld und array.please geben Sie mir eine Idee und Vorschlag basierend auf meinem Problem.Mehrere Textfelder mit Einzelauswahl in IOS

+0

haben Sie einen Blick auf http://stackoverflow.com/a/20741173/1371853 – swiftBoy

+0

Textfeld Delegat Implementieren und Array von Picker reload Picker Ansicht ändern Ihr Problem –

+0

jedes Detail Codierung @PKT –

Antwort

0

Kann sein, das wird Ihnen helfen,

ich den gleichen Code in meinem Projekt getan und es funktioniert. Hier gebe ich dir Code für drei Textfelder.

NSMutableArray *pickerTitleData, *pickerCityData, *pickerStateData; 
@property (strong, nonatomic) IBOutlet UItextfield *txtTitle; 
@property (strong, nonatomic) IBOutlet UItextfield *txtTitle; 
@property (strong, nonatomic) IBOutlet UItextfield *txtTitle; 
    UIPickerView *TitleSelect,*CitySelect, *StateSelect; 




for address type 
     pickerTitleData =[[NSMutableArray alloc]initWithObjects:@"Home",@"Office",@"Other", nil]; 

     TitleSelect = [[UIPickerView alloc]init]; 
     TitleSelect.dataSource = self; 
     TitleSelect.delegate = self; 
     TitleSelect.showsSelectionIndicator = YES; 
     txtTitle.inputView = TitleSelect; 

// same you have three other array 


#pragma mark - Picker View Data source for city 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    @try 
    { 
     if (pickerView == TitleSelect) 
     { 
      return pickerTitleData.count; 
     } 

     else if (pickerView == CitySelect) 
     { 
      return pickerCityData.count; 
     } 

     else if (pickerView == StateSelect) 
     { 
      return pickerStateData.count; 
     } 

     return 1; 
    } 
    @catch (NSException *exception) 
    { 
     NSLog(@"exception--%@",exception.description); 
    } 
} 

#pragma mark- Picker View Delegate for city 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    @try 
    { 
     if (pickerView == TitleSelect) 
     { 
      [txtTitle setText:[pickerTitleData objectAtIndex:row]]; 
     } 

     else if (pickerView == CitySelect) 
     { 
      [txtTownOrCity setText:[pickerCityData objectAtIndex:row]]; 
     } 

     else if (pickerView == StateSelect) 
     { 
      [txtState setText:[pickerStateData objectAtIndex:row]]; 
     } 
    } 
    @catch (NSException *exception) 
    { 
     NSLog(@"%@",exception.description); 
    } 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    @try 
    { 
     if (pickerView == TitleSelect) 
     { 
      return pickerTitleData[row]; 
     } 

     else if (pickerView == CitySelect) 
     { 
      return pickerCityData[row]; 
     } 

     else if (pickerView == StateSelect) 
     { 
      return pickerStateData[row]; 
     } 

     return @""; 

    } 
    @catch (NSException *exception) 
    { 
     NSLog(@"%@",exception.description); 
    } 
} 
+0

Ich hatte eine in Ihrer Codierung gekauft, warum alle Textfeld Name gleich? @ PALAK iOS Entwickler –

+0

es ist nur ein Beispiel, das Sie mit Ihrer Wahl ändern können .. –

1

Befolgen Sie diese Schritte, um Ihr Ziel zu erreichen.

  1. Herunterladen unter generische Klassen von bestimmten Link:

    LabeledPickerView.h

    LabeledPickerView.m

  2. Kopieren Sie diese Klasse in Ihr Projekt und importieren "LabeledPickerView.h" in Ihre ViewController.h Datei. Fügen Sie auch UIPickerViewDataSource, UIPickerDelegate und UITextFieldDelegate hinzu. Jetzt

  3. , initialisiert Picker mit folgenden Methode: -

    -(LabeledPickerView *)GetPickerViewWithTag:(int)Tag { 
    
        LabeledPickerView *pickerView = [[LabeledPickerView alloc] init]; 
    
        pickerView.dataSource = self; 
    
        pickerView.delegate = self; 
    
        pickerView.tag = Tag; 
    
        pickerView.backgroundColor = [UIColor whiteColor]; 
    
        pickerView.showsSelectionIndicator = YES; 
    
        return pickerView; 
    
    } 
    

    Diese Methode pickerEigenschaften zurück.

  4. Nun werden wir Daten in dieses Add UIPickerView Delegate und Datenquelle Methoden wie folgt verwendet: -

    //Based on the text fields tags, you can populate the data in PickerView. 
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    
        return 1;  //Returns components in PickerView. Change with switch - case statement if you want more components in any of the text fields. 
    } 
    
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {  
    
        int tag = (int)((UIPickerView *)pickerView).tag; 
        switch (tag) { 
          case 10: { 
          if (YourArray.count > 0) { 
           return [YourArray count]; 
          } 
          else { 
           return 0; 
          } 
          break; 
          } 
          default: 
          break; 
        } 
        return 0; 
    } 
    
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    
        int tag = (int)((UIPickerView *)pickerView).tag; 
        switch (tag) { 
          case 10: { 
          if ([YourArray count] > 0) { 
           return [YourArray objectAtIndex:row]; 
          } 
          else { 
           return @""; 
          } 
          break; 
         } 
         default: 
         break; 
        } 
        return @""; 
    } 
    
    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    
         int tag = (int)((UIPickerView *)pickerView).tag; 
         switch (tag) { 
          case 10: { 
           if ([YourArray count] > 0) { 
            YourTextField.text = [YourArray objectAtIndex:row]; 
          } 
          else { 
            txtCity.text = @""; 
          } 
          break; 
         } 
         default: 
         break; 
        } 
    } 
    
  5. Nun öffnen Picker, wenn Sie Bearbeitung starten wie folgt:

    -(void)textFieldDidBeginEditing:(UITextField *)textField { 
        if (textField == firstTextField) { 
         LabeledPickerView *picker = [self GetPickerViewWithTag:10]; //Change tag as text field changes.. 
         textField.inputView = picker; 
         [picker selectRow:0 inComponent:0 animated:YES]; 
         [self pickerView:picker didSelectRow:0 inComponent:0]; 
        } 
    } 
    

Fügen Sie in dieser Methode so viele Textfelder hinzu, wie Sie haben. Vergessen Sie nicht, jedem Textfeld verschiedene Tags zuzuweisen.

Mit dem obigen Code können Sie die Einzelauswahl mit mehreren Textfeldern verwenden.

Glückliche Kodierung .. !!

+0

funktioniert nicht zeigt Fehler @Nirrit Dagly –

+0

können Sie mir bitte sagen, was ist der Fehler? –

+0

Ich habe kleinere Änderungen am Code vorgenommen. Bitte versuchen Sie es mit diesem aktualisierten Code. –