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
- 1. UINavigationController: kontroler pop-view w przeciwnym kierunku
- 2. Gest dotknięcia nie działa dla mnie
- 3. "Przesuń palcem" gest nie działa poprawnie w WatchOS
- 4. Peek & Pop - Pop prowadzący do niewłaściwej komórki w UICollectionView
- 5. Jak zresetować kontroler UINavigationController?
- 6. Interaktywny rysunek z kineticjs
- 7. iOS 7 uinavigationcontroller jak wykrywać machnięcia?
- 8. Git interaktywny rebase nie zobowiązuje się odebrać
- 9. Problemy z cocos2d i UINavigationController
- 10. UINavigationController z powrotem przycisk nie animowanie
- 11. Git Interaktywny nieplaterowany
- 12. Jak działają UINavigationController i UIViewController?
- 13. Trzy palcowy gest szczypania
- 14. Non-fullscreen UINavigationController
- 15. Wykryj gest machnięcia fragmentem
- 16. React-Native Hybrid App: Pop UIViewController, który osadza RCTRootView
- 17. Gest UIButton and Swipe
- 18. UINavigationController popToViewController problem
- 19. Jak działa funkcja push i pop w zespole?
- 20. Dlaczego funkcja UINavigationController nie ma właściwości rootViewController?
- 21. Dodawanie Tap gest UIImage
- 22. MVC-pop up window
- 23. Rozwiń segment dla UINavigationController
- 24. Gest Recognizers i TableView
- 25. Wykrywanie Pan Gest Koniec
- 26. Dodaj UINavigationController wewnątrz UIViewController
- 27. Jak zrobić interaktywny dział MATLAB?
- 28. Interaktywny rebelier z rozszerzeniami Git
- 29. .pop() równowartość w Scala
- 30. Uruchomienie modalne UINavigationController
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ą. –