Mam kontroler nawigacyjny w mojej aplikacji na system iOS 7. Widoczny jest tytuł titleView, a także przycisk Wstecz i pasek nawigacyjny. Z jakiegoś powodu interaktywny ruch popu (przesuwanie od lewej krawędzi) nie działa. Nic się nie dzieje. Kiedy loguję gest, nie jest on zerowy. Czy jest coś specjalnego, co muszę zrobić, aby włączyć tę funkcjonalność? Co może spowodować, że nie zadziała?UINavigationController Interaktywny gest pop nie działa?
Odpowiedz
Ech, wygląda po prostu musiałem ustawić delegata gest i wdrożyć następujące:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
Możesz umieścić ten wiersz w viewDidLoad metody.
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
pracował dla mnie .. Dzięki – Simmy
Spójrz na to response i komentarze. Wszystko co musisz zrobić, to ustawić delegata kontrolera nawigacyjnego interaktywnego pop gest Rozpoznawania do nil
:
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
Ustawianie go do lanego siebie do id<UIGestureRecognizerDelegate>
działa również dlatego, że wszystkie metody w protokole są opcjonalne, ale myślę, że ustawienie delegata do nil
jest bardziej odpowiednie w tym przypadku.
Im bardziej wypracowane odpowiedź była zarówno Aaron i lojals
Pierwszy dostosować kontroler nawigacyjny, a następnie umieścić ten kod w klasie
W viewDidLoad umieścić ten wiersz:
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
aw klasa Napisz tę funkcję
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES;}
Znalazłem th w przypadku używania niestandardowych przycisków wstecz, interaktywny gest pop przestaje działać (moim zdaniem Apple nie może przewidzieć, jak zachowa się Twój niestandardowy przycisk powrotu, więc wyłącza ten gest).
Aby rozwiązać ten problem, jak już wspomniano wcześniej, można ustawić właściwość interactivePopGestureRecognizer.delegate
na nil
.
w Swift, można to łatwo zrobić w całej swojej aplikacji, dodając rozszerzenie dla :UINavigationController
jak ten
extension UINavigationController {
override public func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = nil
}
}
Updated odpowiedź
Wygląda ustawiania delegata do nil
przyczyn interfejs aplikacji do zablokowania w niektórych scenariuszach (np. kiedy użytkownik przesuwa się w lewo lub w prawo na kontroler widoku z góry stosu nawigacji).
Ponieważ gestureRecognizerShouldBegin
metoda delegat nie może być obsługiwane w rozszerzeniu, instacji UINavigationController
wydaje się najlepszym rozwiązaniem:
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
}
}
To wydaje się działać, ale okazuje się, że w pewnych okolicznościach zamraża aplikację. Wydaje mi się, że dzieje się tak, gdy pojawia się interaktywny ruch popu, gdy kontroler widoku jest naciskany. Bezpieczniejszym sposobem byłoby podklasy 'UINavigationController'. W podklasie ustaw dla siebie atrybut 'interactivePopGestureRecognizer.delegate' i zapobiegaj rozpoznawaniu interaktywnego gestu pop podczas przesyłania nowego kontrolera widoku. – joern
Rzeczywiście, stwierdziłem, że ten problem również wydaje się mieć wpływ tylko na kontroler widoku z góry stosu kontrolera nawigacyjnego. Zaktualizowałem swoją odpowiedź za pomocą innego rozwiązania opartego na podklasach. –
@Eneko Alonso perfect! Tak jak powiedziałeś, jeśli użytkownik przesuwa palcem w lewo lub w prawo, a następnie naciska przycisk - kontroler widoku push jest zgięty. Podklasowanie rozwiązuje problem 100% – Alex
Ive sprawdził to jednak bardzo nieprzyjemnie problemów, kiedy mam to naprawić wtedy, gdy użytkownik przesuwa się w połowie drogi i następnie wracam i widzę następny kontroler nałożony na poprzedni kontroler widoku. Widzę kontroler Poprzedni widok, a następny zachodzący na siebie jest przezroczysty jak przezroczyste szkło.Tak więc użytkownik jest zablokowany w tym stanie. Dowolny pomysł. To jest coś Wyświetl pojawiło się/pojawi się problem z obsługą. –