Приложих собствено решение. Всъщност две решения, тъй като имах нужда от различни за случаите, когато разрешавах и забранявах PKRevealController
действия с плъзгане.
Случай 1: setRecognizesPanningOnFrontView:NO
Този случай е доста лесен - просто добавям UISwipeGestureRecognizer
, който извиква моя back
метод:
UISwipeGestureRecognizer *backSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(back)];
[backSwipe setDirection:UISwipeGestureRecognizerDirectionRight];
[self.view addGestureRecognizer:backSwipe];
Случай 2: setRecognizesPanningOnFrontView:YES
Този е малко по-сложен. За да избегна конфликт на разпознавателя на жестове, трябваше да докосна разпознавателя на жестове на PKRevealController
. Разбира се, внедрих това само когато PKRevealController
няма leftViewController
.
И така, регистрирам класа, който искам да внедря навигацията с плъзгане назад като слушател на известия:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(back:)
name:NOTIFICATION_BACK_SWIPE
object:self];
И след това във файла PKRevealController.m, в метода - (void)moveFrontViewRightwardsIfPossible
, просто публикувайте известието:
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_BACK_SWIPE object:[(UINavigationController *)self.frontViewController topViewController]];
Тук предавам като обект на уведомление самия получател UIViewController
. Правя това, така че само този конкретен екземпляр UIViewController
да реагира на това известие. В противен случай, ако имате повече UIViewControllers
в стека UINavigationController
, които са абонирани да получават това известие, всички те ще предизвикат UINavigationController
до popViewController
, което ще доведе до произволен брой стъпки назад, докато ние искаме това да се случи само веднъж.
Това е. Наслади се.
person
artooras
schedule
06.01.2014