Je suis en train de travailler sur un projet pour iOS 5 en utilisant Xcode 4.2. J'ai un UITableViewController et souhaitez effectuer une transition lorsque l'utilisateur d'appuyer sur une cellule de tableau, mais la destination-vue-contrôleur dépend des mesures effectuées sur cette cellule. Par exemple, lorsque l'utilisateur d'appuyer sur la cellule je voudrais charger SomeViewController, mais lorsque l'utilisateur d'appuyer sur la même cellule en mode d'édition, je tiens à charge AnotherViewController. Malheureusement, il n'y a aucun moyen de le configurer de multiples enchaîne sur une même cellule dans Xcode 4.2 storyboard builder, ou je n'ai tout simplement pas l'obtenir. Peut-être il ya un moyen de créer des enchaînements à la main, dans l'éditeur de code. Généralement ce que je veux réaliser est de fournir à l'utilisateur un moyen de "saisir" l'élément représenté par la cellule à l'aide de l'une-vue-contrôleur et "modifier" l'élément représenté par la même cellule à l'aide d'un autre point de vue contrôleur. Commutation de la seconde vue-contrôleur (éditeur) lorsque dans le tableau-modifier-mode était ma première, mais peut-être il ya une meilleure façon. Toute aide sera appréciée.
Réponses
Trop de publicités?Alors que la recherche plan de montage, de contrôle-faites glisser à partir de votre source de-Vue-Contrôleur à votre Destination-vue-contrôleur. Cela va créer un segue que vous pouvez déclencher par programme à partir de votre source de-Vue-Contrôleur. S'assurer que vous donnez de vous Enchaîner un nom. Ce nom est ce que vous allez passer dans la Vue source du Contrôleur de performSegue:withIdentifier: la méthode.
Je suis, en ajoutant une réponse juste, parce que, après la lecture de celui sélectionné ci-dessus, dans de nombreux endroits autres que de cela - et c' est la bonne réponse - je me demandais comment faire pour détecter le contact normalement déclencher la séquence. Voyez-vous, si vous créez votre segue la manière habituelle par ctrl-glisser à partir de la vue de la table de la cellule à la suivante contrôleur, puis deux, tout est fait pour vous automatiquement.
- le toucher dans la cellule est détecté
- la séquence est effectuée
mais bien sûr, vous ne pouvez pas bloquer la séquence.
Maintenant, si vous voulez conditionnellement segue, puis (comme mentionné dans les autres réponses) vous supprimez que segue et en créer un nouveau à partir de la UITableViewController (faites-le glisser à partir des objets navigateur plutôt que de la table de montage séquentiel) à la prochaine contrôleur et lui donner un nom.
Ensuite - et c'est la partie qui me manquait - mettre en oeuvre tableView:didSelectRowAtIndexPath
dans votre table view controller pour effectuer la séquence par programme et sous certaines conditions, comme ci-dessous.
Notez que vous devez également identifier votre cellule en quelque sorte, afin de savoir si celui qui vous intéresse a été sélectionné. Vous pourriez le faire en connaissant le chemin d'index dans un tableau statique, mais je préfère mettre mon cellules identificateur unique de l'IB (même si je n'ai pas besoin de lui pour dequeueing puisque c'est un tableau statique) et de les vérifier. De cette façon, si je déplace la cellule vers le haut ou vers le bas dans le tableau statique, je n'aurez pas besoin de modifier ce code.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Find the selected cell in the usual way
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
// Check if this is the cell I want to segue from by using the reuseIdenifier
// which I set in the "Identifier" field in Interface Builder
if ([cell.reuseIdentifier isEqualToString:@"CellIWantToSegueFrom"]) {
// Do my conditional logic - this was the whole point of changing the segue
if (myConditionForSegueIsSatisfied) {
// Perform the segue using the identifier I was careful to give it in IB
// Note I'm sending the cell as the sender because that's what the normal
// segue does and I already had code counting on that
[self performSegueWithIdentifier:@"SegueIdentifer" sender:cell];
}
}
Notez comment j'ai envoyer la cellule avec la séquence normale des enchaînements de la cellule fait ça, et j'avais passé initialement nul, et mon code qui avait dépendu il a cessé de travailler.