12
votes

UinavigationController et back bouton Action

J'ai deux contrôleurs 1st est auto et 2nd est MainController , où je repousse MainController dans pile , le bouton arrière est donc automatiquement à venir.

Ici, je dois faire une alerte lorsque l'utilisateur appuie sur le bouton arrière.

Comment puis-je faire cela?


0 commentaires

7 Réponses :


0
votes

Ajoutez un bouton de retour personnalisé avec une action et définissez votre alerte dans cette méthode d'action.Vous pouvez ajouter votre bouton de retour personnalisé d'ici: http://www.applausible.com/blog/?p=401


0 commentaires

-1
votes

Créez un bouton et donnez l'action du bouton comme suit.

self.navigationController.LeftBarButton = myButton;


2 commentaires

Quelle est l'alerte pour?


@Richy merci de commenter une réponse à cet ancien. L'alerte est destinée à montrer l'alerte comme demandé dans la question.



2
votes

Créez votre propre uibarbuttonitem Code> et définissez-le comme le de gaucheBarbuttonitem code> dans ViewDidLoad code> méthode de MainController code>.

Par exemple (Ici, j'ai utilisé un élément de système, mais vous pouvez également créer une autre référence, voir référence de classe pour plus de détails). p> xxx pré>

où P>

- (void)showAlertView:(id)sender
{
    // alert view here...
}


0 commentaires

8
votes

Cachez d'abord le bouton Précédent à l'aide de

- (void)popAlertAction:(UIBarButtonItem*)sender
{
    //Do ur stuff for pop up
}


5 commentaires

K Les gars merci, c'est la deuxième option, y a-t-il un moyen de détecter l'action du bouton arrière de UinavigationController ..?


Qu'en est-il de B ? Corrigez-le s'il vous plaît.


@HARISHSARAN Que voulez-vous dire? Avez-vous besoin de revenir en arrière lorsque vous cliquez sur la vue Alerte?


Grande suggestion, cela a travaillé pour moi car je fais un contrôleur de navigation personnalisé et je n'ai pas pu implémenter les rappels délégués comme réponse correcte. Cependant, je pourrais pas définir hidedackbutton = oui car cela provoquerait des artefacts visuels lorsqu'il appuie manuellement le nouveau uinavigentitem .


Remarque, vous devez mettre "auto.navigentItem.hidesbackbutton = YES" sur la visualisation du parentContrôleur avant de présenter la mode ViewController avec le bouton arrière personnalisé.



20
votes

ou vous pouvez utiliser les méthodes de déléguement code> UINAVIGATIONCONTROLLER CODE>. La méthode WillShowviewController code> est appelé lorsque le bouton arrière de votre VC est enfoncé.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;


6 commentaires

Aussi ce que je voulais. :-) Pour l'enregistrement, vous devez implémenter le protocole sur le contrôleur d'affichage que vous naviguez vers la suite.


Ces solutions fonctionnent bien et sont les plus efficaces. Assurez-vous que la connexion à votre délégué de NavigationController est in - (Void) ViewDididAppear: (BOOL) animée, sinon alerte apparaît également lorsque la première visiteuse se lance la première fois.


@ Morkrom Oui, il est appelé chaque fois qu'un contrôleur d'affichage est affiché dans le contrôleur de navigation, c'est mieux si vous vérifiez le paramètre View Controller pour apporter les modifications nécessaires.


Et utiliser si ([ViewController IskindofClass: [CustomViewController Classe]]) {..code ..} Pour spécifier sur quelle ViewController il devrait montrer un message


Cette méthode sera appelée chaque fois que la vue disparaîtra, non seulement lorsque vous appuyez sur le bouton arrière. Par exemple, si vous appuyez sur une autre vue (un modèle modal par exemple), cette méthode est appelée aussi.


@ Sébastiennestormacq Vous venez de vérifier le contrôleur d'affichage transmis à la méthode du délégué contre la propriété Self.PresentViewViewController, afin de vous assurer que la modification a été déclenchée par le bouton arrière (très probablement).



7
votes

meilleur et le plus simple strong>

Essayez de mettre cela dans le contrôleur d'affichage dans lequel vous souhaitez détecter la touche: P>

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
       // back button was pressed.  We know this is true because self is no longer
       // in the navigation stack.  
    }
    [super viewWillDisappear:animated];
}


0 commentaires

0
votes

ViewControlkeCount - est le VaR qui détient le nombre de cartes de visualisation précédemment était dans l'uoinavigationController. Ensuite, nous vérifions si ViewControlCount> [ViewControlers comptent] Si oui, nous savons que nous recevrons (c'est-à-dire une imitation de bouton arrière). XXX


0 commentaires