J'ai deux contrôleurs Ici, je dois faire une alerte lorsque l'utilisateur appuie sur le bouton arrière. P>
Comment puis-je faire cela? P> code> 1st est
auto code> et 2nd est
MainController code>, où je repousse
MainController code> dans pile strong>, le bouton arrière est donc automatiquement à venir. P>
7 Réponses :
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 p>
Créez un bouton et donnez l'action du bouton comme suit.
self.navigationController.LeftBarButton = myButton;
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.
Créez votre propre 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> où P> uibarbuttonitem Code>
et définissez-le comme le de gaucheBarbuttonitem code> dans
ViewDidLoad code> méthode de
MainController code>.
- (void)showAlertView:(id)sender
{
// alert view here...
}
Cachez d'abord le bouton Précédent à l'aide de
- (void)popAlertAction:(UIBarButtonItem*)sender { //Do ur stuff for pop up }
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 code>? 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 i> définir hidedackbutton = oui code> car cela provoquerait des artefacts visuels lorsqu'il appuie manuellement le nouveau
uinavigentitem code>.
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é.
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;
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).
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];
}