Uinavigationcontroller interactivePopGestureRecognizer działa nieprawidłowo w iOS7

W iOS7 mamy nowy gest "Przesuń od lewej do prawej", jest to bardzo przydatna funkcja, ale teraz mam z tym problem.

Używam tego kodu, aby dostosować przycisk Wstecz w UINavigationBar.

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];

Ale to wyłączy gest" Przesuń od lewej do prawej", więc używam poniższego kodu, aby gest był włączony.

self.navigationController.interactivePopGestureRecognizer.delegate = self

I wtedy, okazało się, że gest działa nieprawidłowo, jeśli bieżący ViewController ma tableView, gdy tableView jest przewijanie, gest nie zostanie uruchomiony. Teraz gest nie może być uruchomiony łatwo, jest jakiś sposób, aby to naprawić?

Author: Wei, 2014-01-08

4 answers

Ten kod może być dla mnie dobry.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}
 23
Author: Wei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-12 08:59:58

Ustawienie interactivePopGestureRecognizer.delegate na self jest tylko pierwszym krokiem. Drugim krokiem jest wdrożenie

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return ![otherGestureRecognizer isKindOfClass:UIPanGestureRecognizer.class];
}

Test na rozpoznawanie gestów przesuwania jest potrzebny do zablokowania pionowego przewijania widoku przewijania lub tabeli podczas interaktywnego popu.

 4
Author: Ortwin Gentz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-23 11:10:06

Dodaj do kontrolera klasy "UIGestureRecognizerDelegate"

In ViewDidApper add

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    self.navigationController?.interactivePopGestureRecognizer.delegate =  self
}

=)

 4
Author: Bruno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-20 12:23:10

Rozwiązanie, które napisał Wei, nie zadziałało dla mnie. Moje ekrany zamarły, tracąc rozpoznawanie jakichkolwiek gestów.

Używam teraz AHKNavigationController Arkadiusz Holko http://holko.pl/ios/2014/04/06/interactive-pop-gesture/

Zajęło mi 30 sekund, aby uzyskać przez CocoaPods i kolejne 30 sekund, aby skonfigurować jako niestandardową klasę mojego NavigatonController poprzez storyboards.

 3
Author: Tinkerbell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-14 06:50:29