Estoy usando el storyboard
para mi aplicación que está utilizando UINavigationController
. Me gustaría añadir un cuadro de diálogo de confirmación para el valor predeterminado de nuevo el botón para que el usuario no salga accidentalmente. ¿Hay alguna forma de hacer esto? He descubierto que no puedo acceder al botón atrás cuando se ha creado automáticamente por el UINavigationController
.
Alguna idea?
OriginalEl autor mtmurdock | 2011-12-19
Desafortunadamente, no se puede interceptar el botón atrás en este camino. El más cercano fax es el uso de su propio
UIBarButtonItem
conjunto a lanavigationItem.leftBarButtonItem
y establecer una acción para mostrar su alerta etc. Tuve un diseñador gráfico crear las imágenes de los botones que se ven como el estándar botón atrás.Como un aparte, que yo necesitaba para interceptar el botón atrás por una razón diferente. Os exhorto a reconsiderar esta opción de diseño. Si usted está presentando una vista en la que los usuarios pueden realizar cambios y usted quiere que ellos tengan la opción de guardar o cancelar mi humilde opinión, es mejor usar «Guardar» y «Cancelar» botones vs un botón atrás con una alerta. Alertas generalmente son molestas. Como alternativa, dejar claro que los cambios que los usuarios están haciendo están comprometidos en el momento de hacerlas. Entonces, la cuestión es discutible.
usted todavía puede añadir un
leftBarButtonItem
a su guión y configurarlo. Que vendría a sustituir el botón atrás.No me había dado cuenta de que la configuración de
leftBarButtonItem
sustituido el botón auto. Ahora me siento tonta. Gracias!la suya es la mejor respuesta. He sustituido el botón atrás con un UIBarButtonSystemItemCancel y estoy poping manualmente. También he añadido un UIBarButtonSystemItemSave como rightBarButtonItem. Esta es la más limpia de la solución para cancelar y reemplazar el botón atrás.
OriginalEl autor XJones
Cómo he trabajado alrededor de esta situación es mediante el establecimiento de la
leftBarButtonItem
a laUIBarButtonSystemItemTrash
estilo (lo que está inmediatamente obvio que no voy a borrar el elemento de borrador) y la adición de una vista de alerta de confirmar la eliminación. Porque se establece una costumbreleftBarButtonItem
no se comporte como un botón de volver atrás, por lo que no automáticamente pop la vista!Código:
Es realmente tan simple como eso! No veo el gran problema, tbh :p
Tengo que agregar un descargo de responsabilidad, aunque, haciendo de esta forma se rompe la navegación por defecto el comportamiento y apple podría no como los desarrolladores de hacer esto. Yo no he presentado ninguna de las aplicaciones (de momento) con esta característica, así que no estoy seguro de si apple va a permitir su aplicación en la tienda cuando se hace esto, pero se advirtió 😉
ACTUALIZACIÓN: Buena noticia, todo el mundo! En el mientras tanto he publicado una app (Appcident) la App Store con este comportamiento en el lugar y que Apple no parece a la mente.
OriginalEl autor Thomas Vervest
De hecho, usted puede encontrar el botón de volver Atrás la vista y agregar UITapGestureRecognizer.
Si usted mira esta imagen:

Usando este código:
Usted puede darse cuenta de cómo encontrar el punto de Vista de la parte Posterior del botón. Es siempre el último en subvistas matriz de la navigationbar.
Lo que he usado:
Pulsando en el botón atrás y voilà:

1. No hay garantía 🙂 2. Añadir gesto de reconocimiento omite todos los otros gestos.
Bueno, si no hay ninguna garantía de entonces no es una buena solución. Si Apple cambia algo en su código para cambiar el orden de los botones en la lista, entonces mi aplicación va a romper y voy a tener un error difícil de rastrear.
He encontrado que
UITapGestureRecognizer
es bastante inútil. No maneje el caso de que un usuario podría toque y mantenga en una vista y, a continuación, suelte. En su lugar, por lo general sólo utiliza unUILongPressGestureRecognizer
con elminimumPressDuration
conjunto de propiedades a0.0
. De esta forma, se encarga tanto de las escuchas y largo pulsando un botón.Nunca hacer este tipo de subvista-matriz-hack! Su aplicación podría romper con las nuevas versiones de iOS y no es que fácil de entender para otras personas de la lectura de su código. Tal vez no es un problema de ahora, sino más adelante. Thomas Vervest y @XJones respuesta es el camino correcto a seguir.
OriginalEl autor mafonya
Aquí es una solución: (Probado en iOS10 y 11)
Agregar toque gesto de reconocimiento a la barra de navegación:
cancelsTouchesInView = true asegura que el botón atrás no obtiene el evento táctil.
Manejar el gesto:
Lugar de utilizar 100 como número mágico usted puede encontrar la vista que contiene el botón atrás y utilizar el marco de detectar toques.
OriginalEl autor ELO8C8
Aquí es lo que usted necesita hacer para hacer fácilmente una costumbre botón que reproduce el aspecto de la predeterminada del botón atrás en el iPhone y el iPad, con el código escrito de forma explícita porque me imagino que va a venir aquí en busca de nuevo en algún momento.
Poner las siguientes funciones en algún lugar de la aplicación (.m) archivo de la correspondiente UIViewController con un UINavigationController y, a continuación, en viewDidLoad ejecutar
[self setupBackButton];
Lo que te gustaría hacer con el botón atrás, poner en el
backButtonPressed
función.Obtener el exacto botón png de iOS, recomiendo la UIKit Obras De Arte Extractor. Después de ejecutar el proyecto y guardar las imágenes en el iPad Retina simulador seguido por el iPad no-retina simulador, buscar los títulos en el ‘Común’ en la carpeta del simulador de la carpeta que aparece en su escritorio. Los nombres de archivo «UINavigationBar…de nuevo(@2x).png» y «UINavigationBar…BackPressed(@2x).png» son lo que usted desea.
Estoy adjuntando también el por defecto iOS (iPhone y iPad) de nuevo el botón de la barra png utilizado en el código anterior como una conveniencia. Tenga en cuenta que con las actualizaciones de iOS, la mirada de el valor predeterminado de la barbuttonitems puede cambiar…
Votada abajo como esta ha quedado obsoleto por iOS7 y hasta
OriginalEl autor Victor Van Hee
Easy peasy. Cubrir sólo el botón con un transparente UIControl y la captura de los toques.
Este esquema también funciona para tabBar botones, pero es más complejo de determinar la ubicación.
OriginalEl autor Jeff