Je veux changer le contrôleur de vue quand un bouton est pressé iphone il
-
20-09-2019 - |
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
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];
}