Estado buscando alrededor por un tiempo, pero parece que no puede encontrar una solución de trabajo.
Estoy tratando de desactivar el dedo para volver a la vista anterior gesto, en Swift.
He probado una gran variedad de soluciones que incluyen:
self.navigationController?.interactivePopGestureRecognizer.enabled = false
y
self.navigationController.interactivePopGestureRecognizer.delegate = self
func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer!) -> Bool {
return false
}
Hay un nuevo método de hacer esto o algún otro método que funciona?
- Esto causa un problema cuando un usuario no es totalmente deslizar el dedo, e interfiere con la naturaleza de la interfaz de usuario que estamos utilizando (en busca del tiempo en una pista de audio)
- Bueno, no quiero hacer fracasar tu pregunta, pero te sugiero que (1) resolver la no-totalmente-deslice problema y (2) la sangría de su pista de audio en busca de interfaz de usuario de modo que no es tan cerca de la orilla. Se espera que esto UX, y es especialmente importante para el iPhone 6 Plus y los usuarios de iPad, donde en una especie de molestia para llegar a la barra de navegación.
- De todos modos, el código debe desactivar el gesto de reconocimiento. Funciona en versiones anteriores de iOS?
- Ah buen punto sobre el iPhone 6 – tal vez voy a mirar a modificar el método dealloc – pero voy a dejar abierta la pregunta como estoy interesado, no obstante,
- Yo estoy probando en iOS 8 como mínimo
- Yo era capaz de hacerlo con devolviendo false en gestureRecognizerShouldBegin. Está usted recibiendo de devolución de llamada en gestureRecognizerShouldBegin ? Tal vez usted poner este código en mal vista controlador…
Puede desactivar, pero que no sería recomendable como la mayoría de los usuarios de iOS volver al deslizar y menos pulsando el botón atrás.
Si desea desactivar sería más razonable utilizar un
modal segue
en lugar de empujar un pase que no es tan grande de una transferencia.Si usted realmente quiere deshacerse de el pase para ir de vuelta la función acabo de desactivar el botón de atrás y tiene un botón hecho en la parte superior derecha de la pantalla.
El siguiente es un enfoque sencillo para deshabilitar & volver a habilitar el pase de vuelta.
Swift 3.x & hasta
En un viewDidLoad/willAppear/didAppear método de agregar:
Sólo ten en cuenta que si lo haces con
viewDidLoad
, entonces la próxima vez que abra la vista, no puede ser ajustado dependiendo de si es o no permanece en la pila.A menos que usted desea permanecer apagado, usted tendrá que activar de nuevo cuando se cierra la vista ya sea a través de
willMove(toParentViewController:)
owillDisappear
. SunavigationController
será nula enviewDidDisappear
, a fin de que sea demasiado tarde.Una nota especial sobre SplitViewControllers:
Como se ha señalado por CompC en los comentarios, usted tendrá que llamar a la segunda navegación controlador de aplicarlo a una vista de detalle como tal:
Swift 2.2 & Objective-C
Swift versiones 2.x & abajo:
Objective-C:
navigationController?.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Yo era capaz de hacer esta devolviendo false en gestureRecognizerShouldBegin
UIGestureRecognizer!
en la OP del código vsUIGestureRecognizer
aquí.Nada malo con cualquiera de respuesta de Hari o Stefan, pero este es más sucinto. Acaba de poner en viewDidLoad y listo.
EDICIÓN:
Una pequeña advertencia es que si el Controlador de Navegación, que fue inaugurado por otro punto de vista y el Controlador de Navegación es cerrado, entonces obtendrá un EXC_BAD_ACCESS de error. Para solucionarlo tienes que guardar el original UIGestureRecognizer y poner de nuevo al salir de la vista.
Declarar:
Inmediatamente antes de quitar el gesto:
A continuación, cuando el cierre de la vista:
para objective-c
Yo generalmente asegúrese de que pase de nuevo está habilitado en tantos lugares como sea posible, incluso la adición de un gesto personalizado reconocedor de añadir modal pantallas. Sin embargo, para una autenticación y el proceso de descarga en mi aplicación de iniciar el proceso con un modal de navegación controlador y, a continuación, empuje la vista para cada siguiente paso. Sin embargo, una vez que se haya completado quiero para prevenir la copia de seguridad en la autenticación de las pantallas.
Para este escenario he estado usando:
en
viewWillAppear()
en la pantalla final. Usted puede deshacer estas enviewWillDisappear()
si usted está empujando otro punto de vista y la necesidad de ellos.RowanPD la lógica para Swift 4
Esto es algo que perder si no funciona después de que usted ha intentado todo.
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
a su viewWillAppear(animado:) método.UINavigationControllerDelegate
,UIGestureRecognizerDelegate
protocolos. si es así, quite la.Si el requisito es mostrar el menú de lado algunas de las pantallas, a continuación, agregue AddScreenEdgePanGesture en esta visión específica en lugar de navigationController ver
reemplazarlo
con este