ios - bottom - status bar iphone
¿Cómo desactivar el gesto automático para retroceder una vista con un controlador de navegación? (6)
Así que me doy cuenta de que todas mis vistas están recibiendo el gesto de retroceder (abrir una vista) cuando el usuario desliza el dedo en el lado izquierdo de la pantalla (en cualquier orientación) ( Esto es nuevo con iOS7 )
He intentado hasta ahora sin ningún resultado apagarlo usando:
[self.navigationItem setHidesBackButton:YES];
Dentro de la inicialización del NavigationController (ya que el delegado parece estar usando eso).
obj-c
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
rápido
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Añadiendo a la solución de gabriele.
Para admitir cualquier iOS antes de iOS 7, tendrá que envolver este código con esto:
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Esto evitará que la aplicación falle en iOS 6 y iOS 5 para el selector que falta.
Descubrí que configurar el gesto como deshabilitado no siempre funciona. Funciona, pero para mí solo lo hizo después de que una vez usé la congestión. La segunda vez no activaría la espalda.
La solución para mí fue delegar el gesto e implementar el método shouldbegin para devolver 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;
}
Para IOS 8 (Swift):
class MainNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.interactivePopGestureRecognizer.enabled = false
// Do any additional setup after loading the view.
}
}
Usa este código para anteriores a iOS 7
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Utilizo esta solución en mi proyecto, deshabilita solo la actividad interactiva de PopGestureRecognizer y le permite usar otros reconocedores de gestos.
- (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;
}
}