Désactiver le balayage geste à Swift
Été en regardant autour sur ici pour un certain temps mais n'arrive pas à trouver une solution qui fonctionne.
J'essaie de désactiver le glisser pour revenir à la vue précédente geste, en Swift.
J'ai essayé une variété de solutions, y compris:
self.navigationController?.interactivePopGestureRecognizer.enabled = false
et
self.navigationController.interactivePopGestureRecognizer.delegate = self
func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer!) -> Bool {
return false
}
Est-il une nouvelle façon de faire ceci ou d'une autre méthode qui fonctionne?
- Il est à l'origine d'un problème lorsqu'un utilisateur n'a pas entièrement le balayage, et interfère avec la nature de l'INTERFACE utilisateur, nous utilisons (temps de recherche dans une piste audio)
- Eh bien, je ne veux pas faire dérailler votre question, mais je vous suggère de (1) résoudre le n'est pas complètement balayez vers la question et (2) tiret votre piste audio à la recherche de l'INTERFACE utilisateur de sorte qu'il n'est pas si près du bord. C'est prévu UX, et est particulièrement important pour l'iPhone 6 Plus et iPad, où les utilisateurs c'est une sorte de tracas pour obtenir la barre de navigation.
- De toute façon, votre code doit désactiver le geste de reconnaissance. Cela fonctionne sur les anciennes versions d'iOS?
- Ah bon point au sujet de l'iPhone 6 - je vais peut-être regarder la modification de la méthode dealloc - mais je vais quand même laisser la question ouverte que je suis intéressé néanmoins
- Je suis en essais sur iOS 8 minimum
- J'ai été en mesure de le faire avec le retour de faux dans gestureRecognizerShouldBegin. Êtes-vous d'obtenir de rappel à gestureRecognizerShouldBegin ? Peut-être que vous mettez ce code dans le mal-vue-contrôleur...
InformationsquelleAutor Phil Hudson | 2015-07-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez désactiver, mais qui ne serait pas être recommandé comme la plupart des utilisateurs d'iOS de revenir en arrière en glissant et de moins en appuyant sur le bouton retour.
Si vous souhaitez le désactiver, il serait plus raisonnable d'utiliser une
modal segue
au lieu de pousser des enchaînements qui n'est pas que les grandes d'un transfert.Si vous voulez vraiment vous débarrasser de l'balayage de fonction de retour, je voudrais juste désactiver le bouton retour et un bouton en haut à droite de l'écran.
La suite est d'une approche facile de la désactivation de & re-activation du balayage retour.
Swift 3.x & jusqu'
Dans un viewDidLoad/willAppear/didAppear méthode add ():
Il suffit de garder à l'esprit que si vous le faites avec
viewDidLoad
, alors la prochaine fois que vous ouvrez la vue, il ne peut pas être réglé selon si oui ou non il reste dans votre pile.Sauf si vous voulez qu'il reste éteint, vous devrez la retourner sur le dos quand la vue est fermée, soit par
willMove(toParentViewController:)
ouwillDisappear
. VotrenavigationController
sera nul àviewDidDisappear
, de sorte que c'est trop tard.Une note spéciale sur SplitViewControllers:
Comme l'a souligné CompC dans les commentaires, vous aurez besoin de faire appel de la deuxième manette de navigation pour l'appliquer à une vue de détail en tant que tel:
Swift 2.2 & Objective-C
Swift versions 2.x & ci-dessous:
Objective-C:
navigationController?.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
J'ai été capable de faire cela, en retournant false dans gestureRecognizerShouldBegin
UIGestureRecognizer!
dans le cas des OP code vsUIGestureRecognizer
ici.Rien de mal à répondre à partir de Hari ou Stefan, mais c'est plus concis. Il suffit de le mettre dans le viewDidLoad et vous avez terminé.
EDIT:
Une petite mise en garde est que si la manette de Navigation a été ouvert par un autre point de vue et la manette de Navigation est fermée, alors vous aurez une EXC_BAD_ACCESS erreur. Pour corriger cela, vous devez enregistrer l'original UIGestureRecognizer et le remettre lorsque vous quittez la vue.
Déclarer:
Immédiatement avant de retirer le geste:
Puis lors de la fermeture de la vue:
pour objective-c
J'généralement assurez-vous que glisser en arrière est activé dans autant d'endroits que possible, en y ajoutant même une coutume geste de reconnaissance pour l'ajouter à modale des écrans. Toutefois, pour une authentification et le processus de téléchargement dans mon application, j'ai commencer le processus avec un modal manette de navigation et de pousser ensuite la vue de chaque étape suivante. Cependant, une fois qu'il est terminé, je veux les empêcher de sauvegarde dans l'authentification des écrans.
Pour ce scénario, je ai été en utilisant:
dans
viewWillAppear()
sur l'écran final. Vous pouvez annuler cesviewWillDisappear()
si vous êtes pousser un autre point de vue et ont besoin d'eux.RowanPD est logique pour Swift 4
C'est quelque chose que vous avez manqué si cela ne fonctionne pas après avoir essayé tous les.
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
à votre viewWillAppear(animés:) de la méthode.UINavigationControllerDelegate
,UIGestureRecognizerDelegate
protocoles. si si, il suffit de le supprimer.Si l'exigence est de montrer le menu de gauche sur certains écrans, puis ajouter AddScreenEdgePanGesture sur ce point de vue spécifique au lieu de navigationController vue
remplacer
avec cette