Question

J'ai un contrôleur de vue de la table avec des cellules personnalisées. Dans ces cellules, j'ai ajouté un bouton pour chacune des cellules. Ce que je voudrais que c'est que lorsque j'appuie sur ce bouton, il affiche une nouvelle vue avec plus d'informations sur cette cellule, différente de l'avis que je reçois de didSelectRowAtIndexPath.

Je sais qu'il est maintenant une question difficile. Je l'ai vu que le bouton a une action sur InterfaceBuilder (Atterrissez peut-être), mais comment puis-je associer à ce code. Où dois-je déclarer le code qui gère cet événement?

Je l'ai posté dans d'autres forums sans réponse, espérons que cela fonctionnerait.

Merci. Gian

Était-ce utile?

La solution

Je serais probablement sous-classe UIButton d'avoir une instance de NSIndexPath. De cette façon, chaque UIButton individuelle dans un UITableViewCell peut « savoir » où il est dans la vue de la table, donc lorsque vous appuyez sur le bouton, vous pouvez appeler une méthode qui prend un NSIndexPath et pousse une nouvelle vue, semblable à ce que vous faites dans -didSelectRowAtIndexPath: mais avec votre autre point de vue à la place (peut-être donner un nom de méthode descriptive comme -didPressButtonAtIndexPath:).

Au lieu d'utiliser l'Interface Builder pour ce faire, vous devez ajouter une méthode à la sous-classe UIButton lui-même qui, à son tour appelle une méthode sur votre contrôleur de vue. Ensuite, pour chaque UIButton, vous pouvez utiliser la méthode UIControl -addTarget:action:forControlEvents:. Demandez à la UIButton appeler sa propre méthode, qui appelle la méthode du contrôleur. Votre solution pourrait ressembler à:

// MyButton.h
@interface MyButton : UIButton {
    NSIndexPath *myIndexPath;
    MyViewController *viewController;
}

- (void)didPressButton;
@end

// MyViewController.h
@interface MyViewController { }
- (void)didPressButtonAtIndexPath:(NSIndexPath *)indexPath;
@end

Ensuite, lorsque vous construisez vos cellules, pour chaque bouton ajouter appel:

[button addTarget:button 
           action:@selector(didPressButton)
 forControlEvents:UIControlEventTouchDown];

Et enfin, mettre en œuvre -didPressButton pour ressembler à:

- (void)didPressButton {
   [controller didPressButtonAtIndexPath:myIndexPath];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top