¿Cómo puedo personalizar el botón de navegación hacia atrás en iOS 7 y superior sin título? (es decir, solo con la flecha)
self.navigationItem.leftBarButtonItem = self.editButtonItem;
Me pregunto si tienen self.backButtonItem;
O
¿algo como esto?
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemBACK
target:self action:@selector(back)];
Respuestas:
En realidad es bastante fácil, esto es lo que hago:
C objetivo
Swift 2
Swift 3
Ponga esta línea en el controlador de vista que está empujando a la pila ( el controlador de vista anterior ). El nuevo botón de retroceso del controlador de vista ahora mostrará lo que haya puesto para initWithTitle, que en este caso es una cadena vacía.
fuente
prepareForSegue
en el controlador de vista y funcionó perfectamente.Encontré una manera fácil de hacer mi botón de retroceso con una sola flecha iOS.
Supongamos que tiene un controlador de navegación que va a ViewA desde ViewB. En IB, seleccione la barra de navegación de ViewA, debería ver estas opciones: Título, Aviso y Botón Atrás.
Ver las opciones de una barra de navegación
El truco es elegir el título del botón de retroceso del controlador de vista de destino (ViewB) en las opciones del controlador de vista anterior (Vista A). Si no completa la opción "Botón Atrás", iOS colocará el título "Atrás" automáticamente, con el título del controlador de vista anterior . Por lo tanto, debe completar esta opción con un solo espacio.
Rellene el espacio en la opción "Botón de retroceso"
El resultado:
fuente
Back Button
establecido en un solo carácter de espacio (es decir, tanto viewa y ViewB)¡Solo usa una imagen!
OBJ-C :
SWIFT 4 :
Icon-Back.png
[email protected]
[email protected]
fuente
navigationController?.interactivePopGestureRecognizer?.delegate = self
hace el truco para mantener el gesto de deslizar hacia atrásiOS7 tiene nuevas reglas de interfaz, por lo que es mejor mantener al menos la flecha hacia atrás al presionar una UIView. Es muy fácil cambiar el texto "atrás" mediante programación. Simplemente agregue este código antes de presionar la vista (o prepareForSegue si está usando StoryBoards):
Esto cambiará el texto predeterminado "Atrás", pero mantendrá la flecha hacia atrás con estilo iOS7. También puede cambiar el color del tinte para la flecha hacia atrás antes de presionar la vista:
¡Espero que esto te ayude!
fuente
No hay mucho que necesites hacer. Puede lograr lo mismo a través del guión gráfico en sí.
Simplemente vaya al controlador de navegación raíz y dé un espacio. Recuerde no al controlador que deseaba el botón Atrás sin título, sino al controlador de navegación raíz.
fuente
Si bien la respuesta de Kyle Begeman funciona totalmente, es bastante molesto tener este código en todos los controladores de vista posibles. Terminé con una
UINavigationItem
categoría simple . ¡Cuidado, aquí hay dragones! Lo siento, quiero decir, swizzling:fuente
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000) forBarMetrics:UIBarMetricsDefault];
( fuente ), podría ser un poco menos elegante, pero el swizzling se sintió como una exageraciónUINavigationItem
un método muy propio, no hay herencia involucrada. Y_cmd
es muy poco probable que se involucre en un captador. De todos modos, es un buen punto. Entonces, si tienen alguno de estos numerosos ayudantes en su proyecto, asegúrese de usarlo aquí también.EDITAR: 2014-04-09: a medida que gané reputación, lo siento porque ya no uso este truco. Recomiendo la respuesta de Kyle. También tenga en cuenta que el
self
deself.navigationItem.backBarButtonItem
no es el controlador de vista, se muestra el botón de retroceso, sino el controlador de vista anterior para volver.Si no necesita tener el texto del título para el controlador de vista anterior, simplemente complete el título con una cadena en blanco;
Esto evitará mostrar "atrás" con chevron en el controlador de vista push.
EDITAR: incluso si utiliza texto de título no en blanco, establecer el título del controlador de vista anterior en
viewWillAppear:
trabajos, excepto que el título puede parpadear en un parpadeo cuando aparece el controlador de vista. Creo que "La aplicación de Twitter" parece hacer un truco más sutil para evitar el parpadeo.fuente
Esto funciona, pero eliminará el título del elemento anterior, incluso si vuelve a aparecer:
Simplemente configure esta propiedad en
viewDidLoad
el controlador de vista empujado.fuente
viewWillAppear
para que siempre esté configurado correctamente.Así es como lo hago y la forma más simple, funciona y más clara de hacerlo.
Esto funciona si se incrusta en
Navigation Controller
Swift 3
En
viewDidLoad
Agregar esto al controlador de vista, desea que el botón Atrás sea solo una flecha.La diferencia de esto con la respuesta de @Kyle Begeman es que usted llama a esto en el controlador de vista que desea que el botón de retroceso sea solo una flecha, no en el controlador de vista de pila.
fuente
No tiene acceso a la navegación backButtonItem de la manera que desea, necesita crear su propio botón de retroceso como a continuación:
Y por supuesto:
fuente
Objetivo: personalizar todos los botones de retroceso en
UINavigationBar
un icono blancoPasos: 1. en el método "didFinishLaunchingWithOptions" de AppDelete :
2.en el
viewDidLoad
método de la superclase comúnViewController
:fuente
SWIFT 4
Para aquellos que buscan crear botones de retroceso personalizados y eliminar su título, use el siguiente código dentro del controlador de vista que está presionando el nuevo:
Para un uso más universal, haga lo siguiente:
Cree una función universal de la siguiente manera:
Luego úselo en los controladores de vista de la siguiente manera:
fuente
El hack simple de iOS6 también funciona en iOS7:
Editar: no uses este truco. Ver comentario para más detalles.
fuente
Puedes usar esto. Esto funciona perfectamente para mí simplemente agregando un
UIButton
como una vista personalizada para elUIBarButtonItem
.Pruebe el siguiente código
fuente
Cree un
UILabel
con el título que desee para su controlador de vista raíz y asígnelo al controlador de vistanavigationItem.titleView
.Ahora configure el título en una cadena vacía y el siguiente controlador de vista que presione tendrá un botón de retroceso sin texto.
fuente
fuente
Todas las respuestas no resuelven el problema. No es aceptable establecer el título del botón de retroceso en cada controlador de vista y agregar desplazamiento al título todavía hace que el próximo título del controlador de vista se desplace a la derecha.
Aquí está el método que usa el método swizzling, solo cree una nueva extensión para UINavigationItem
fuente
Apliqué el siguiente código en viewDidLoad y funciona:
Solo para actualizar, uso Vector Icon
fuente
Puede subclasificar UINavigationController, establecerse como delegado y establecer backBarButtonItem en el método delegado
navigationController:willShowViewController:animated:
fuente
Establecer título vacío
Cambiar imagen posterior
fuente
He estado usando esta solución desde iOS 5 más o menos sin ningún problema. Hice una función de utilidad que llamo en mis controladores de vista. Debe hacerlo en viewDidLoad o en cualquier punto posterior.
En algunos casos, el elemento de navegación ya puede existir, en otros casos necesita ser creado. Esto explica ambos casos sin alterar el título del elemento de navegación. Le permite eliminar el título simplemente pasando
@""
.fuente
La única forma que funcionó para mí fue:
ACTUALIZAR:
Cuando cambié el indicador de animación de segue a verdadero (antes era falso), la única forma que funcionó para mí fue:
fuente
Si tiene dos ViewController (FirstVC, SecondVC) incrustados en el controlador de navegación, y desea que solo haya una flecha hacia atrás en SecondVC.
Puedes probar esto en ViewDidLoad de FirstVC
Luego, cuando ingrese a SecondVC, verá que solo hay una flecha hacia atrás
fuente
Si configura el tintColor Of NavigationBar, agregue una imagen de botón de retroceso personalizada sin título para que el color de tinte refleje el color de la imagen. Siga este enlace de Apple Document.
https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/UIKitUICatalog/index.html#//apple_ref/doc/uid/TP40012857-UIView-SW7
fuente
Mira esta respuesta
¿Cómo cambiar el nombre del botón de retroceso UINavigationController?
establecer
title
textostring
con un espacio en blanco como a continuaciónNo tengo suficiente reputación para agregar comentarios :)
fuente
Estoy escrito una extensión para hacer esto más fácil:
fuente
Puede cambiar el título a @ "" del ViewController actual en viewWillDisappear, y cuando esté a punto de volver a mostrarse, vuelva a configurar el título a lo que era antes.
fuente
En el método prepareForSegue: de su primer ViewController, establece el título de las vistas en @ "", de modo que cuando se presiona la siguiente vista, mostrará el título anterior de ViewController, que será @ "".
El único problema con esto es que cuando presiona el botón Atrás, su vista anterior no tendrá un título, por lo que puede agregarlo nuevamente en viewWillAppear:
No me gusta mucho esta solución, pero funciona y no encontré otra forma de hacerlo.
fuente
Para agregar a la respuesta anterior de Thomas C , a veces poner un solo espacio no funciona y hay que seguir agregando espacios.
Sabrá que tuvo éxito cuando vea "Elemento del botón de barra -" debajo del "Elemento de navegación". Eso está en el esquema del documento (Editor-> Mostrar esquema del documento). Una vez que vea la imagen de arriba, puede eliminar algunos espacios y ver si aún funciona.
fuente
Al igual que Kyle Begeman, agrega el código anterior en su controlador de vista raíz. Se aplicará todo el controlador de vista secundaria. Además, agregando esto en initWithCoder: método, puede aplicar el estilo para controladores de vista raíz en xib, storyboard o enfoques basados en código.
fuente