Quindi ho un controller di navigazione nel mio costruito per iOS 7 app. Il titleView è visibile, così come il pulsante indietro e la barra di navigazione. Per qualche ragione, il gesto pop interattivo (scorrere dal bordo sinistro) non funziona. Non accade nulla. Quando registro il gesto, non è nulla. C'è qualcosa di speciale che devo fare per abilitare questa funzionalità? Cosa potrebbe far sì che non funzioni?UINavigationController Interactive Pop Gesture non funziona?
risposta
Eh, sembra che ho dovuto impostare il delegato gesto e mettere in atto le seguenti:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
si può mettere questa riga nel metodo diviewDidLoad.
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
10 ha funzionato per me .. Grazie a – Simmy
Guarda questo response e commenti. Tutto quello che dovete fare è impostare delegato interattivo pop gesto di riconoscitore del controller di navigazione per nil
:
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
Impostandola a un auto pressofuso per id<UIGestureRecognizerDelegate>
funziona anche perché tutti i metodi nel protocollo sono opzionali, ma credo che l'impostazione del delegato a nil
è più appropriato in questo caso.
La risposta più elaborato era sia Aaron e lojals
Prima di personalizzare il controller di navigazione e poi inserire questo codice nella classe
In viewDidLoad messo questa linea:
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
E in classe scrivere questa funzione
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES;}
Ho trovato th quando usi i pulsanti personalizzati, il gesto pop interattivo smette di funzionare (la mia opinione è che Apple non può prevedere come si comporterà il tuo pulsante back personalizzato, quindi disabiliterà il gesto).
Per risolvere questo problema, come già menzionato in precedenza, è possibile impostare la proprietà interactivePopGestureRecognizer.delegate
su nil
.
In Swift, questo può essere fatto facilmente in tutta l'intera applicazione con l'aggiunta di un'estensione per :UINavigationController
come questo
extension UINavigationController {
override public func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = nil
}
}
risposta Aggiornato
Sembra come impostare il delegato alla nil
cause l'interfaccia utente dell'applicazione si blocca in alcuni scenari (ad esempio quando l'utente fa scorrere verso sinistra o destra sul controller della vista superiore dello stack di navigazione).
Perché gestureRecognizerShouldBegin
metodo delegato non può essere gestito in un interno, sottoclasse UINavigationController
sembra la soluzione migliore:
class NavigationController: UINavigationController, UIGestureRecognizerDelegate {
/// Custom back buttons disable the interactive pop animation
/// To enable it back we set the recognizer to `self`
override func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
Questo sembra funzionare, ma si scopre che in determinate circostanze congela l'app. Penso che accada quando viene attivato il gesto pop interattivo mentre viene premuto un controller di visualizzazione. Un modo più sicuro sarebbe quello di sottoclasse 'UINavigationController'. Nella sottoclasse, imposta l'opzione 'interactivePopGestureRecognizer.delegate' e previene che il gesto pop interattivo venga riconosciuto mentre viene premuto un nuovo controller di visualizzazione. – joern
Infatti, ho riscontrato che anche questo problema sembra influenzare solo il controller di visualizzazione superiore dello stack del controller di navigazione. Ho aggiornato la mia risposta con una soluzione diversa basata sulla sottoclasse. –
@Eneko Alonso perfetto! Proprio come hai detto, se l'utente fa scorrere verso sinistra o verso destra e poi tocca un pulsante, il controller di visualizzazione push viene visualizzato in modo errato. La sottoclasse risolve il problema al 100% – Alex
- 1. UINavigationController - bug animazione pop
- 2. UINavigationController: controller pop view nella direzione opposta
- 3. Annullamento interattivo gesto UINavigationController pop non chiamare i metodi UINavigationControllerDelegate
- 4. iOS8 UINavigationController push/pop con problema UIView trasparente
- 5. UIPopoverController w/UINavigationController Subview contentSizeForViewInPopover non funziona su Parent
- 6. Perché questo semplice programma push/pop Perl non funziona?
- 7. tasto Tab non funziona in pop-up in estensione Chrome
- 8. UINavigationController pulsante Indietro non animare
- 9. Javascript Gesture Library
- 10. UIButton e Swipe Gesture
- 11. come funziona il push and pop nell'assemblaggio
- 12. Google Interactive Doodle
- 13. cocos2d e UINavigationController trouble
- 14. non a schermo intero UINavigationController
- 15. Visualizzazione non differita da git interactive add
- 16. Non posso git rebase --interactive più
- 17. Peek & Pop: il pop porta alla cella errata in UICollectionView
- 18. iPad Gesture Recognizer - Risposta
- 19. UINavigationController trasparenza?
- 20. Pan gesture interferisce con UISlider
- 21. svolgersi con le sequenze personalizzate su UINavigationController pop tramite il pulsante "Indietro"
- 22. Python pop() vs pop (0)
- 23. Git interactive nonstage
- 24. Negoziazione automatizzata di Interactive Broker
- 25. Aggiunta Tap Gesture su UIImage
- 26. UINavigationController pulsante indietro metà funziona in orientamento orizzontale iPad
- 27. azioni Riconoscimento e pulsanti Gesture
- 28. Override swipe gesture su UITableView
- 29. Riconoscimento di gesture simultanei in Iphone SDK
- 30. Twitter Bootstrap pop-over non caricando
Ive ha verificato questo, ma problema molto inquietante, quando ho questa fissa quindi se l'utente scorre a metà strada e poi torna indietro vedo il controller successivo sovrapposto al controller della vista precedente. Vedo il controller della vista precedente e il successivo è trasparente come vetro trasparente.Quindi l'utente sembra essere bloccato in questo stato. Qualche idea. Questo è qualcosa Vista apparirà/apparirà problema di gestione. –