Comment piéger le bouton de retour de l'événement
J'ai un UITableViewController qui lance un UIViewController et je tiens à le piège à chaque fois que l'arrière est enfoncé dans le contrôleur enfant, qui est la classe qui dérive de 'UIViewController'. Je peux changer le Bouton précédent titre, mais le réglage de la cible & les valeurs d'action lors de la configuration de la backBarButtonItem semble l'avoir ignoré. Ce qui est une façon de recevoir un certain type de notification que le bouton de Retour a été mis sur écoute?
- (void)showDetailView
{
//How I'm creating & showing the detail controller
MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyDetailView" bundle:nil];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Pages"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(handleBack:)];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
[self.navigationController pushViewController:controller animated:animated];
[controller release];
}
- (void)handleBack:(id)sender
{
//not reaching here
NSLog(@"handleBack event reached");
}
Pour les personnes qui cherchent un moyen efficace de iOS 5+ solution: stackoverflow.com/a/13370744/1072846
OriginalL'auteur Alexi Groove | 2009-10-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez mettre en œuvre la
viewWillDisappear
méthode de UIViewController. Ce qui est appelé lorsque votre contrôleur est sur le point de disparaître (soit parce qu'un autre a été poussé sur la manette de navigation de la pile, ou parce que le bouton "retour" a été pressée).Pour déterminer si le point de vue est en train de disparaître à cause de la touche retour enfoncée, vous pouvez utiliser un indicateur personnalisé que vous définissez partout où vous appuyez sur un nouveau contrôleur sur la manette de navigation, comme indiqué ci-dessous
Et où que vous poussez un nouveau point de vue contrôleur, vous devez n'oubliez pas aussi de définir le drapeau...
Dans ce cas, j'ai mis un drapeau dans didSelectRowAtIndexPath: (où vous habituellement pousser un nouveau contrôleur sur la manette de navigation). viewWillDisappear peut alors inspecter le drapeau et en déduire que le bouton a été pressé ou pas
Ce n'est pas pour résoudre le problème Justin souligné; Avec le drapeau de votre pays vous savez comment la vue est entré en existence, mais cela ne signifie pas que c'est la seule façon de disparaître.
Il n', parce que vous êtes en contrôle de ce qui est envoyé sur la manette de navigation. Si vous le faites à droite (c'est à dire, vous n'avez pas oubliez l'un des cas), le seul cas à gauche, où le drapeau de votre pays n'est pas défini et que votre vue est en train de disparaître, c'est quand l'utilisateur appuie sur le bouton retour. Cela fonctionne très bien pour moi.
depreceated cette réponse
OriginalL'auteur
Il a été un moment depuis que cela a été demandé, mais j'ai juste essayé de faire moi-même. J'ai utilisé une solution similaire à Zoran, mais au lieu d'utiliser un drapeau je l'ai fait:
Je pense qu'il contourne les problèmes avec des drapeaux et de l'OMI est plus propre, mais pas aussi efficace (si il y a beaucoup d'éléments sur la manette de navigation).
[self.navigationController.viewControllers indexOfObjectIdenticalTo: self] != NSNotFound
au lieu decontainsObject
, qui ne serait que de comparer l'adresse de pointeur.Vérification: Il fonctionne.
Si votre contrôleur est contenu dans un autre récipient, vous aurez à comparer avec: "indexOfObjectIdenticalTo:auto.parentViewController", d'autres que cela, fonctionne.
si (([self.parentViewController.navigationController.viewControllers indexOfObjectIdenticalTo: auto] != NSNotFound)) a travaillé pour moi.
Il est beaucoup plus efficace. Ce n'est pas le code qui doit être optimisé.
OriginalL'auteur
À mon avis la meilleure solution.
Mais il ne fonctionne qu'avec iOS5+
où écrire ce
OriginalL'auteur
J'utilise ce code:
Mais ce n'est pas réel, quand l'utilisateur appuie sur l'onglet bouton de la barre et de la pop à la racine de la vue-contrôleur à une seule étape. Pour cette situation, utilisez ceci:
N'oubliez pas ensuite:
OriginalL'auteur
Vous pouvez faire votre propre bouton et le placer comme le
leftBarButtonItem
. Puis appelez votre méthode où vous pouvez faire ce que, et de les appeler[self.navigationController popViewController...
vousVous pouvez créer votre propre flèche vers la gauche de l'image si vous connaissez la largeur de votre bouton de texte, ou vous pouvez créer par programmation, imitant ce que fait Apple.
OriginalL'auteur
il suffit de remplacer
backBarButtonItem
avecleftBarButtonItem
OriginalL'auteur