2010-06-19 6 views
0

J'ai un UITableViewCell personnalisé qui fait partie d'un contrôleur de navigation. La cellule a un bouton et quand ce bouton est pressé je veux pousser une vue sur mon contrôleur de navigation.Appel de pushViewController depuis l'intérieur d'une classe UITableViewCell personnalisée

Je peux le faire assez facilement en utilisant un sélecteur dans ma méthode cellForRowAtIndexPath.

[cell.fooButton addTarget:self action:@selector(pushBarViewController:) forControlEvents:UIControlEventTouchUpInside]; 

Et puis à l'intérieur de la méthode pushBarViewController je peux effectuer l'opération push

[self.navigationController pushViewController:barViewController animated:YES]; 

Cela fonctionne assez bien, mais maintenant je dois passer des informations contenues dans mon habitude UITableViewCell dans mon barViewController. Mon action: @selector ne me permettra pas de passer des arguments, donc je ne peux pas utiliser cette méthode.

J'ai créé une action sur la pression du bouton à l'intérieur de l'UITableViewCell personnalisée, mais je ne peux pas pousser la vue d'ici car il n'y a pas de contrôleur de navigation.

Quelqu'un peut-il aider?

Répondre

0

J'ai réussi à comprendre. Je continuais ceci:

[cell.fooButton addTarget:self action:@selector(pushBarViewController:) forControlEvents:UIControlEventTouchUpInside]; 

Et puis dans le pushBarViewController Je l'ai fait:

UIButton* button = (UIButton *)sender; 
CustomCell *cell = (CustomCell *)[button superview]; 
NSUInteger row = [customTableView indexPathForCell:cell].row; 
Foo *foo = [fooArray objectAtIndex:row]; 

Maintenant que j'ai accès à foo je peux alloc mon barViewController et mis

barViewController.foo = foo 

Et puis fais la poussée habituelle.

[self.navigationController pushViewController:barViewController animated:YES];  
0

Que diriez-vous ceci:

-(void)pushBarViewController{ 
    YourBarViewController *barViewController = [[YourBarViewController alloc] init]; 
    barViewController.myString = @"this string will be passed to the new view"; 
    [self.navigationController pushViewController:barViewController animated:YES]; 
    [barViewController release]; 
} 

et dans le fichier d'en-tête YourBarViewController.h, définissez

NSString *myString; 

avec

@property(nonatomic, retain) NSString *myString; 

et synthétisent ce dans le fichier de mise en œuvre.

+0

Le problème est que j'ai les données dont j'ai besoin dans mon UITableViewCell. Je veux que ces données soient disponibles dans mon BarViewController. La question est comment puis-je obtenir les données contenues dans mon UITableViewCell dans mon BarViewController. – KJF

0

Créez des variables d'instance dans la classe BarViewController et définissez-les avant de pousser le contrôleur.

+0

Je ne peux pas pousser le contrôleur dans ma classe UITableViewCell, donc la question est comment puis-je obtenir les données de ma classe UITableViewCell dans mon BarViewController. – KJF

+0

Vous aurez alors besoin d'une référence à votre cellule. Lorsqu'un bouton déclenche une action, il se définit généralement comme l'expéditeur, ce qui vous permet d'identifier l'origine du message. Je présume que les informations que vous souhaitez envoyer sont référencées à partir du bouton? Vous devriez avoir quelque chose comme 'pushBarViewController: (id) sender' avec le' sender' étant le bouton.Lorsque vous placez le bouton sur la cellule, vous pouvez également donner au bouton un «int» ivar, correspondant à la position de la cellule (et la position dans le tableau de données). Ensuite, quand vous obtenez le message d'un bouton, découvrez ce que l'int était, puis l'info. –

-1

Suivez l'exemple déjà donné.

+0

Je ne vous comprends pas, quel exemple? Celui d'Andy? Cet exemple ne fonctionne pas pour moi car la variable d'instance myString est définie dans la méthode pushBarViewController située dans la classe BarViewController. Les données dont j'ai besoin résident dans une instance de UITableViewCell. Je dois en quelque sorte passer les données de mon instance UITableViewCell dans mon instance BarViewController. – KJF

Questions connexes