2016-05-06 1 views
1

Je suis nouveau sur IOS Je souhaite afficher un tableau particulier dans la vue du sélecteur pendant que je clique sur textfield. J'ai créé deux champs de texte et deux tableaux avec un aperçu. Je cours ma réussite de projet mais échoue quand je sélectionne la première rangée de textfield affichage dans la vue de sélecteur et deuxième champ de texte clique sur son deuxième tableau dans la vue de sélecteur je ne veux pas second tableau dans le premier textfield.Affichage du tableau précédent dans la vue du sélecteur

vue Picker codage:

pktStatePicker = [[UIPickerView alloc] initWithFrame:CGRectZero]; 

    pktStatePicker .delegate = self; 

    pktStatePicker .dataSource = self; 

    [ pktStatePicker setShowsSelectionIndicator:YES]; 

    txtText.inputView = pktStatePicker ; 
    currency1.inputView = pktStatePicker; 

    // Create done button in UIPickerView 


    UIToolbar* mypickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 56)]; 

    mypickerToolbar.barStyle = UIBarStyleBlackOpaque; 

    [mypickerToolbar sizeToFit]; 


    NSMutableArray *barItems = [[NSMutableArray alloc] init]; 


    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 

    [barItems addObject:flexSpace]; 


    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(pickerDoneClicked)]; 

    [barItems addObject:doneBtn]; 


    [mypickerToolbar setItems:barItems animated:YES]; 


    txtText.inputAccessoryView = mypickerToolbar; 
    currency1.inputAccessoryView = mypickerToolbar; 

} 

vue Picker délégués et textfield:

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    if (textField == txtText) 
    { 
     pktStatePicker = arrMsg; 
     [pktStatePicker reloadAllComponents]; 

    } 
    else if (textField == currency1) 
    { 
     pktStatePicker = currencyname1; 
     [pktStatePicker reloadAllComponents]; 
    } 

} 
-(void)pickerDoneClicked 

{ 
    NSLog(@"Done Clicked"); 


    [txtText resignFirstResponder]; 
    //[currency1 res]; 

} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

{ 

    return 1; 

} 


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 

{ 
    if(pickerView.tag == 1){ 
     return arrMsg.count; 
    }else{ 
    return currencyname1.count; 
    } 
} 


- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 

{ 
    if(pickerView.tag==1){ 

     return [arrMsg objectAtIndex:row]; 
    } 
    else{ 
      return [currencyname1 objectAtIndex:row]; 
    } 

} 


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

{ 
    if(pickerView.tag ==1){ 
    txtText.text = (NSString *)[arrMsg objectAtIndex:row]; 
    }else{ 
    currency1.text = (NSString *)[currencyname1 objectAtIndex:row]; 
    } 

} 
+0

qui sont vos deux tableau et ses valeurs? –

Répondre

0

Où avez-vous mis pktStatePicker.tag? Par défaut, il est mis à zéro, et vous voyez le second tableau à chaque fois. Ajouter à vous codez

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField 
{ 
if (textField == txtText) 
{ 
    pktStatePicker.tag = 1; 


} 
else if (textField == currency1) 
{ 
    pktStatePicker.tag = 0; 

} 
    [pktStatePicker reloadAllComponents]; 
return YES; 
} 

et supprimer

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
if (textField == txtText) 
{ 
    pktStatePicker = arrMsg; 


} 
else if (textField == currency1) 
{ 
    pktStatePicker = currencyname1; 

} 

    [pktStatePicker reloadAllComponents]; 

}

Il est faux. Je pense que cela peut vous aider. Je n'ai pas vérifié

+0

une erreur se produit lorsque "le contrôle atteint la fin de la fonction non vide" –

+0

J'ai oublié "return YES;" à la fin du corps de la méthode –

+0

toujours pas de changement –

0

Faire comme ceci:

Déclare simple ENUM pour gérer les états de sélecteur dans le haut de votre fichier .m:

typedef NS_ENUM(NSUIInteger, PickerState) { 
    PickerStateFirst = 0, 
    PickerStateSecond 
} 

Déclarez une variable PickerState:

@property (nonatomic) PickerState pickerState; 

Définir l'état du sélecteur lors de l'édition par textfield commence son étiquette (définie dans IB):

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField { 
    self.pickerState = textField.tag; 
    [pktStatePicker reloadAllComponents]; 
    return YES; 
} 

Vérifiez quel état en ce moment dans les ramasseurs délégués:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    if(self.pickerState == PickerStateFirst){ 
     return arrMsg.count; 
    } 
    return currencyname1.count; 
} 


- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    if(self.pickerState == PickerStateFirst){ 
     return [arrMsg objectAtIndex:row]; 
    } 
    return [currencyname1 objectAtIndex:row]; 
} 


- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    if(self.pickerState == PickerStateFirst){ 
    txtText.text = (NSString *)[arrMsg objectAtIndex:row]; 
    } 
    currency1.text = (NSString *)[currencyname1 objectAtIndex:row]; 
}