2010-09-06 5 views
2

im en utilisant un UIPickerView pivoté pour l'utiliser horizontalement. Cela fonctionne très bien jusqu'à présent.UIPickerView obtient l'élément "Cliqué"?

Maintenant, je veux obtenir le View/Titre de la ligne "clicked" UIPickerView. Le délégué me donne l'opportunité d'obtenir le "selectedRow" lorsque le sélecteur sélectionne une ligne. Je ne veux aucun événement en le sélectionnant j'ai besoin de l'événement de cliquer dessus. Le plus drôle est, je peux déjà cliquer sur les éléments. Je n'ai ajouté aucun bouton ou autre chose. les éléments/lignes "cliqués" sont surlignés comme un bouton. Mais où dois-je attacher l'écouteur d'événement? ou comment puis-je obtenir un de ces événements?

J'ai également essayé d'ajouter des boutons comme vue à l'uipickerview. Cela fonctionne jusqu'à présent, mais je ne peux pas cliquer sur un bouton.

Ai-je besoin d'un bouton comme Vue dans une ligne UIPickerView pour obtenir l'événement touchupinside ou puis-je utiliser l'élément row normal d'un UIPickerView pour obtenir un tel événement?

Merci pour toute aide!

Répondre

0

Lorsque vous cliquez sur un élément, il est automatiquement sélectionné. Ainsi, la méthode selecetedRow sera assez bonne, elle vous donnera aussi le bon élément lors du balayage (ce qui n'arrivera pas avec l'approche "clic").

Pour obtenir les événements UIPickerView, vous pouvez configurer votre contrôleur pour qu'il se conforme aux protocoles UIPickerViewDataSource et UIPickerViewDelegate et définir le délégué et la source de données du sélecteur sur le contrôleur. De cette façon, vous pouvez définir le contenu du pickerView avec des méthodes comme

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

et obtenir l'événement:

– selectedRowInComponent: 
+1

thx pour répondre mais je suppose que celui-ci ne m'aidera pas beaucoup. L'utilisateur doit sélectionner une valeur avec la sélection, puis soumettre plus ou moins sa sélection en cliquant directement dessus. peut-être que je viens d'ajouter un autre bouton pour soumettre, mais je pensais que je peux utiliser la ligne-vue ... – Phil

0

u peut personnaliser le pickerView et d'hériter de leur méthode d'événement tactile.

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event { 
    if (!self.dragging) { 
    [self.nextResponder touchesEnded: touches withEvent:event]; 
    }  
    //here u can keep track of touch event(click ,double click) 
    [super touchesEnded: touches withEvent: event]; 
} 
+1

Ok, je suppose que cela devrait fonctionner, mais j'ai besoin d'un cours prolongeant un uipickerview droit? Mh, peut-être que je devrais vraiment construire un composant personnalisé pour résoudre ce problème, j'ai juste pensé que c'était plus facile parce que le sélecteur obtient les événements. dommage... – Phil

8

Il est très facile:

- (void)viewDidLoad { 
    picker.userInteractionEnabled = YES; 
    UITapGestureRecognizer *tapGesture =[[UITapGestureRecognizer alloc] initWithTarget:self 
                         action:@selector(pickerTap)]; 
    [picker addGestureRecognizer:tapGesture]; 
    [tapGesture release]; 
} 

- (void)pickerTap { 
    NSLog(@"Picker tapped"); 
} 

Vous n'avez pas besoin de sous-classe UIPickerView.

0

vérifiez this post, ce n'est peut-être pas la solution exacte que vous recherchez, mais cela aide.

J'ai initialement mis en œuvre le clic pour sélectionner en ajoutant un bouton transparent avec l'index de ligne comme étiquette dans chaque élément du sélecteur. Il ne fonctionne plus sur iOS 7 et doit trouver une nouvelle solution.