Ответ 1
Obj-C
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
стремительные
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Итак, я замечаю, что все мои взгляды получают жест, чтобы вернуться (поп смотреть), когда пользователь перебирает левую часть экрана (в любой ориентации) (Это новое с iOS7)
Я пробовал до сих пор без возможности отключить его, используя:
[self.navigationItem setHidesBackButton:YES];
В самом начале самого NavigationController (поскольку делегат, похоже, использует это).
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Добавление к решению Габриэле.
Для поддержки любого iOS перед iOS 7 вам необходимо обернуть этот код следующим образом:
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Это остановит сбой приложения в iOS 6 и iOS 5 для отсутствующего селектора.
Я использую это решение в своем проекте, оно отключает только interactivePopGestureRecognizer и позволяет использовать другие распознаватели жестов.
- (void)viewDidLoad {
[super viewDidLoad];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer isEqual:self.navigationController.interactivePopGestureRecognizer]) {
return NO;
} else {
return YES;
}
}
Я выяснил, что установка жестов для инвалидов только не всегда работает. Он работает, но для меня это произошло только после того, как я когда-то использовал заставку. Второй раз это не вызовет зарождение.
Исправить для меня было делегировать жест и реализовать метод shouldbegin для возврата NO:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Disable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Enable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return NO;
}
Для IOS 8 (Swift):
class MainNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.interactivePopGestureRecognizer.enabled = false
// Do any additional setup after loading the view.
}
}
Используйте этот код для предыдущего, чем iOS 7
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}