web-dev-qa-db-fra.com

iOS 7 Geste de bouton arrière

Dans iOS 7, il y a le nouveau geste de glisser pour faire apparaître: vous faites glisser de gauche à droite sur le côté gauche de votre écran et le UINavigationController revient à l'ancien UIViewController .

Lorsque je crée un bouton de retour personnalisé comme celui-ci, les gestes de glisser-déplacer ne fonctionnent plus:

UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:self action:@selector(navigateBack)];
[customBackButton setBackButtonBackgroundImage:barBackBtnImg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[customBackButton setBackButtonBackgroundImage:barBackBtnImgHighlighted forBarMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = customBackButton;

Comment puis-je utiliser un bouton de retour personnalisé et faire glisser le geste natif pour faire apparaître?

Mise à jour:

C'est ce qui se passe dans naviguerBack :

- (void)navigateBack {
    [self.navigationController popViewControllerAnimated:YES];
}
16
dlinsin

Ajoutez simplement la ligne de code suivante:

[self.navigationController.interactivePopGestureRecognizer addTarget:self action:@selector(handleGesture:)];

Vous pouvez ajouter votre propre UIGestureRecognizer et faire apparaître le UIViewController vous-même. Voir docs pour plus d'informations.

13
prizzl

Il n'est pas nécessaire d'ajouter votre propre reconnaissance de gestes. Le UINavigationController le fait déjà pour vous. Vous devez définir le délégué pour le interactivePopGestureRecognizer avant de l'activer.

Faites les deux choses suivantes:

self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
[self.navigationController.interactivePopGestureRecognizer setEnabled:YES];
35
udit gupta

J'utilise

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"nav_back.png"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"nav_back.png"]];

[UIBarButtonItem.appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -64) forBarMetrics:UIBarMetricsDefault];
3
Albert Chu

Pour éviter les plantages, vous devez faire attention à l'ajout et à la suppression de votre sélecteur arrière personnalisé. La raison en est que le contrôleur de navigation reste en place pendant que vous appuyez sur le contrôleur popping. Comme déjà indiqué après avoir ajouté votre bouton de retour personnalisé + sélecteur, vous devez effectuer les opérations suivantes dans viewDidApear.

    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
    {
       self.navigationController.interactivePopGestureRecognizer.enabled = YES;
       self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
       [self.navigationController.interactivePopGestureRecognizer addTarget:self action:@selector(navigateBack)];
    }

Puis en vue

        if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
        {
           [self.navigationController.interactivePopGestureRecognizer removeTarget:self action:@selector(performCompletion)];
        }

Le timing de ces appels est une clé. Sinon, vous pouvez tomber en panne, voir plus de détails sur la raison dans ici

2
Zeev Vax

Il y a un nouveau reconnaisseur de gestes UIScreenEdgePanGestureRecognizer. Vous pouvez l'ajouter à votre vue et gérer respectivement (appelez navigateBack), répliquant le comportement de navigation des contrôleurs de vue.

1
YuliaSh.

Qu'avez-vous fait dans "naviguerBack"?

Utilisez cette méthode comme ceci:

- (void)navigateBack
{
    [self.navigationController popViewControllerAnimated:YES];
}
0
Jordan Montel

essayez d'ajouter ceci dans le bouton de retour personnalisé self.navigationController.interactivePopGestureRecognizer.delegate = (id) self;

0