iOS interactivePopGestureRecognizer включается автоматически после нажатия ViewController
У меня есть подкласс UINavigationController, который имеет максимум 4 ViewController в стеке. Давайте назовем их сначала ВК... четвертый ВК. Мой NavController может выполнять пользовательские переходы между VC и ios7/8. Предполагается, что обратный жест отключен и включен в зависимости от того, какой VC в данный момент находится на вершине стека. Я установил свой корневой VC (firstVC) в качестве делегата NavController и пытаюсь включить / отключить жест назад в методе делегата.
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController respondsToSelector:@selector(needsBackGestureEnabled)]) {
[self.navigationController.interactivePopGestureRecognizer setEnabled:YES];
NSLog(@"Back gesture enabled");
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
} else {
if ([navigationController.interactivePopGestureRecognizer isEnabled]) {
[self.navigationController.interactivePopGestureRecognizer setEnabled:NO];
NSLog(@"Back gesture disabled");
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
}
Это работает как шарм за исключением одного глюка. Я чувствую, что короткая схема может лучше объяснить ситуацию:
FirstVC - [CustomTran] -> SecondVC - [push] -> ThirdVC - [push] -> FourthVC
FourthVC - единственный, у которого есть селектор -needsBackGestureEnabled, но после перехода со второго на третий обратный жест включается сам по себе. Даже если кнопка "Назад" заменена CustomBarButtonItem. Я чувствую, что выполнение анимации по умолчанию -pushViewController делает жест возврата каким-то образом включенным. Я попытался явно отключить его в моем подклассе NavController в -pushViewController, но это ничего не изменило. Есть идеи, почему это происходит и как это исправить?