UITableView prepareForSegue assignant indexPath à l'expéditeur?
Dans le code ci-dessous je suis juste essayer de configurer un enchaîner directement à partir de la UIViewController
à un DetailViewController
. J'ai l'habitude de faire la transition à partir de la UITableViewCell
(je pense que c'est plus clair), mais cette fois, je voulais juste essayer d'aller directement à partir de la ViewController
à l'aide de -tableView:didSelectRowAtIndexPath:
Ma question est: je suis arrivé à une situation où j'avais besoin d'accéder à la UITableViewCell
indexPath
de l'intérieur -prepareForSegue:sender:
ma solution a été d'envoyer le indexPath
via sender
. Habituellement, je mettrais de l'expéditeur à self
ici, j'ai regardé autour et je ne trouve pas de référence à cela, je suis juste curieux de savoir si l'aide de l'expéditeur pour passer un indexPath est acceptable? Je suis assez sûr que c'est, et je suis sûr d'avoir lu que vous pouvez quelque part avant, mais je ne trouve pas de référence à maintenant.
//------------------------------------------------------------------- **
//DELEGATE: UITableView
//------------------------------------------------------------------- **
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%s", __PRETTY_FUNCTION__);
[self performSegueWithIdentifier:@"SEGUE_TWO" sender:indexPath];
}
//------------------------------------------------------------------- **
//SEGUE: ViewController_ONE > DetailViewController
//------------------------------------------------------------------- **
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"%s", __PRETTY_FUNCTION__);
if([[segue identifier] isEqualToString:@"SEGUE_TWO"]) {
NSUInteger cellRow = [(NSIndexPath *)sender row];
DetailViewController *destinationController = [segue destinationViewController];
[destinationController setDataString:[[self dataList] objectAtIndex:cellRow]];
}
}
EDIT: Ce que je cherchais dans ce cas a été
NSIndexPath *indexPath = [[self tableView] indexPathForSelectedRow];
essentiellement un moyen d'obtenir indexPath
en -performForSegue:sender:
sans avoir à passer par le paramètre sender (en -performSegueWithIdentifier:sender:
)
source d'informationauteur fuzzygoat
Vous devez vous connecter pour publier un commentaire.
Je évitent généralement à l'aide de l'expéditeur dans
prepareForSegue:
car il pourrait être rien. Ce fait en affirmant que votre expéditeur est ce que vous attendez de plus en plus lourde et fragile. Aussi, je préfère vérifier pour la classe de l'destinationViewController objet plutôt que de les enchaîner nom. Votre fonctionnalité est liée à votre objet (ou plus specficially son interface), et non le titre de votre segue, donc la vérification de votre classe, il ressort clairement de ce que vous essayez d'accomplir.Ci-dessous, c'est l'habituel modèle que j'utilise dans la production lorsque les segueing à partir d'un
UITableView
. Notez que vous devez toujours vérifier si le destinationViewController est intégré dans une nav de contrôleur et de vérifier ensuite la classe de l'objet ainsi assurez-vous de le manipuler correctement. Enfin, l'utilisation d'un faire valoir pour s'assurer que quelque part en bas de la ligne, vous n'avez pas ajouté quelques nouvelles segue que vous avez oublié de poignée.Vous pouvez utiliser UITableView la méthode de
indexPathForCell
. J'espère que vous avez une tableView variable d'instance.