2010-11-19 2 views
4

J'ai 3 sélecteurs sur ma vue, dont un ne contient que des images, donc pour celui-ci je dois utiliser viewForRow mais pour les 2 autres, qui sont des sélecteurs communs avec des labels, j'ai besoin de titleForRow sauf si j'utilise viewForRow, titleForRow ne s'appelle jamais. Comment puis-je faire appeler les deux délégués dans ma classe?Comment utiliser viewForRow et titleForRow dans la même classe pour différents cueilleurs?

C'est ce que je:

 
- (UIView *)pickerView:(UIPickerView *)thePickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ 

    [[[objectPicker subviews] objectAtIndex:0] setHidden:YES]; 
    [[[objectPicker subviews] objectAtIndex:5] setHidden:YES]; 
    [[[objectPicker subviews] objectAtIndex:8] setHidden:YES]; 

    return ; //will be implemented, but this will return the icons 
} 

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

    [[[objectPicker subviews] objectAtIndex:0] setHidden:YES]; 
    [[[objectPicker subviews] objectAtIndex:5] setHidden:YES]; 
    [[[objectPicker subviews] objectAtIndex:8] setHidden:YES]; 

    if (pickerView == self.timePicker) { 
     return [timeList objectAtIndex:row]; 
    } 
     else if(pickerView == self.powerPicker) { 
     return [powerList objectAtIndex:row]; 
    } 
} 

Répondre

2

Création de classes différentes pour chacun des sélecteurs, chacun contenant ses propres délégués. Ensuite, il suffit de les importer dans ma classe mainController et de les initialiser dans la méthode viewDidLoad.

Voici la solution que j'usedL

=========================== trouvé la solution (solution): == D'abord, j'ai créé 3 classes différentes pour mes 3 sélecteurs, chacun avec un .xib différent. Ajouté ces 3 ramasseurs dans ma classe principale du contrôleur:

// Ne pas oublier #import « YourClass.h » et instancier sur le fichier .h de votre contrôleur principal

objPickerVC = [[ObjectPickerViewController alloc] initWithNibName:@"ObjectPickerViewController" bundle:[NSBundle mainBundle]]; 
powerPickerVC = [[PowerPickerViewController alloc] initWithNibName:@"PowerPickerViewController" bundle:[NSBundle mainBundle]]; 
timePickerVC = [[TimePickerViewController alloc] initWithNibName:@"TimePickerViewController" bundle:[NSBundle mainBundle]]; 

CGRect rect1 = CGRectMake(5, 43, 100, 216); 
objPickerVC.view.frame = rect1; 
[self.view addSubview:objPickerVC.view]; 

CGRect rect2 = CGRectMake(110, 43, 100, 216); 
powerPickerVC.view.frame = rect2; 
[self.view addSubview:powerPickerVC.view]; 

CGRect rect3 = CGRectMake(215, 43, 100, 216); 
timePickerVC.view.frame = rect3; 
[self.view addSubview:timePickerVC.view]; 

En faisant cela, J'ai des délégués individuels pour chaque pickerView me permettant de les définir, mais j'ai besoin qu'ils soient. P.S: Il est important, pour le positionnement, que sur votre pickerViews xib vous les centralisiez sur la vue. Si vous ne le faites pas, lorsque vous essayez de les positionner -> CGRectMake (215, 43 ...) par exemple, ne sera pas sur la position REAL (215, 43 ...). Je sais, ça n'a pas de sens, mais c'est un bug terrible et ça vous oblige à le positionner sur des essais. Changez la valeur - courez - changez - courez, jusqu'à ce que vous ayez raison.

3

Vous ne pouvez pas avoir les deux dans le même délégué. La solution consiste à implémenter uniquement viewForRow: et renvoyer un objet UILabel pour les colonnes de texte. Définissez label.text sur la chaîne que vous renvoyez dans textForRow:.

+0

Je sais mais la raison pour laquelle je ne voulais pas faire cela est parce que quand vous renvoyez une étiquette, vous avez le rectangle bleu quand l'étiquette est sélectionnée dans le sélecteur. Mais j'ai créé les sélecteurs dans différentes classes pour avoir leurs propres délégués. Juste les importés dans le contrôleur principal. :) –

Questions connexes