2010-03-16 7 views
0

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

Je sais que c'est maintenant une question difficile. J'ai vu que le bouton a une action sur interfacebuilder (toucher peut-être), mais comment puis-je le lier à quel code. Où dois-je déclarer le code qui gère cet événement?

J'ai posté dans d'autres forums sans réponse, j'espère que cela fonctionnerait.

Merci. Gian

Répondre

0

Je sous-classerais probablement UIButton pour avoir une instance de NSIndexPath. De cette façon, chaque UIButton individuel dans un UITableViewCell peut "savoir" où il se trouve dans la vue de table, ainsi quand vous pressez 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 vue à la place (peut-être lui donner un nom de méthode descriptive comme -didPressButtonAtIndexPath:). Au lieu d'utiliser Interface Builder pour ce faire, vous devez ajouter une méthode à la sous-classe UIButton elle-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 à l'UIButton d'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 un appel:

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

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

- (void)didPressButton { 
    [controller didPressButtonAtIndexPath:myIndexPath]; 
}
+0

Merci Tim. J'étais sur le point de répondre à ma propre question. J'ai pris une autre approche. Avant cette question, j'ai dû personnaliser une cellule, j'ai donc fait une sous-classe de UITableViewCell pour ajouter des images et des étiquettes supplémentaires. Donc, aussi, dans IB j'ai ajouté un bouton. Dans mon code, la cellule de la sous-classe, j'ai ajouté un IBACtion et connecter cette action avec l'événement "Touch Down" de ce bouton. Pour savoir, j'ai imprimé quelque chose dans NSLog pour savoir que j'allais participer à l'événement. Pour ce que je vois, en ce moment je ne peux pas savoir quel bouton a été pressé. Je suppose que votre solution résout cela. droite? Le problème est que je ne comprends pas grand chose, @selector par exemple – gvalero87

+0

BTW merci pour vous répondez c'est vraiment bon. C'est juste que je suis vraiment nouveau à ça. Juste une semaine de programmation en tout ce qui concerne mac: S ... En ce moment j'essaie de comprendre comment obtenir une nouvelle vue modale lorsque vous appuyez sur ce bouton. – gvalero87

+0

Salut Tim, s'il vous plaît répondre à quelques questions que j'ai. Vous avez dit que lorsque je construisais ma cellule, je devais le faire (code 2). J'ai une sous-classe tableviewcell qui est connectée au fichier xib qui contient la vue pour cette cellule, donc j'ai juste ajouté un bouton à cette vue et l'ai connecté à un IBOutle dans la sous-classe tableViewcell. Alors, que voulez-vous dire lorsque vous créez cette cellule? – gvalero87

Questions connexes