Creé una barra de herramientas en IB con varios botones. Me gustaría poder ocultar / mostrar uno de los botones dependiendo del estado de los datos en la ventana principal.
UIBarButtonItem
no tiene una propiedad oculta, y los ejemplos que he encontrado hasta ahora para ocultarlos implican configurar los botones de la barra de navegación en cero, lo que no creo que quiera hacer aquí porque es posible que deba mostrar el botón nuevamente (no mencionar eso, si conecto mi botón a un IBOutlet, si lo configuro en cero, no estoy seguro de cómo recuperarlo).
ios
uibarbuttonitem
uitoolbar
Sasha
fuente
fuente
Respuestas:
Guarde su botón en una salida fuerte (llamémoslo
myButton
) y haga esto para agregarlo / eliminarlo:Debido a que está almacenado en la salida, mantendrá una referencia a él incluso cuando no esté en la barra de herramientas.
fuente
Sé que esta respuesta es tarde para esta pregunta. Sin embargo, podría ayudar si alguien más se enfrenta a una situación similar.
En iOS 7, para ocultar un elemento de botón de barra, podemos usar las dos técnicas siguientes:
SetTitleTextAttributes
: - Esto funciona muy bien en elementos de botones de barra como "Listo", "Guardar", etc. Sin embargo, no funciona en elementos como Agregar, Símbolo de papelera, etc. (al menos no para mí) ya que no son textos.TintColor
: - Si tengo un elemento de botón de barra llamado "deleteButton": -Para ocultar el botón, utilicé el siguiente código: -
Para mostrar el botón nuevamente utilicé el siguiente código: -
fuente
deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()
para deshabilitar y ocultar, ydeleteButton.enabled = true; deleteButton.tintColor = nil
para volver a habilitar y mostrar de forma normal.UIColor.clear
paraUIControlState.disabled
y puedo mostrar / ocultar el botón consetEnabled
. Por supuesto, como dijiste, esto solo funciona para los botones de texto.Aquí hay un enfoque simple:
Acabo de ejecutarlo en mi iPad con retina y .01 es lo suficientemente pequeño como para que no aparezca.
fuente
self.window?.tintColor = APP_PRIMARY_COLOR
en applelegate, entonces esto no funcionaráEs posible ocultar un botón en su lugar sin cambiar su ancho o quitarlo de la barra. Si configura el estilo como simple, elimine el título y desactive el botón, desaparecerá. Para restaurarlo, simplemente invierta sus cambios.
fuente
A continuación se muestra mi solución, aunque lo estaba buscando para la barra de navegación.
Aquí "navBar" es un IBOutlet para NavigationBar en la vista en XIB Aquí quería ocultar el botón o mostrarlo en función de alguna condición. Así que estoy probando la condición en "If" y si es verdadero, estoy configurando el botón en nil en el método viewDidLoad de la vista de destino.
Esto puede no ser relevante para su problema exactamente pero algo similar en caso de que desee ocultar botones en NavigationBar
fuente
rightBarButtonItem
más tarde , asegúrese de que el elemento del botón esté almacenado en un IBOutlet fuerte para que no se libere cuando lo retire de la barra de navegación.Para Swift 3 y Swift 4 puede hacer esto para ocultar
UIBarButtomItem
:Y para mostrar el
UIBarButtonItem
:En el
tintColor
debe tener que especificar el color de origen que está utilizando para elUIBarButtomItem
fuente
Actualmente estoy ejecutando OS X Yosemite Developer Preview 7 y Xcode 6 beta 6 dirigido a iOS 7.1 y la siguiente solución me funciona bien:
UINavigationItem
yUIBarButtonItem
sEjecute el siguiente código para eliminar
Ejecute los siguientes códigos para agregar botones nuevamente
fuente
Usé IBOutlets en mi proyecto. Entonces mi solución fue:
Y cuando necesite volver a mostrar esta barra, solo configure las propiedades invertidas.
En Swift 3, en cambio,
enable
use laisEnable
propiedad.fuente
self.dismissButton.customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
fuente
iOS 8. UIBarButtonItem con imagen personalizada. Intenté muchas formas diferentes, la mayoría de ellas no estaban ayudando. La solución de Max, la
setTintColor
no estaba cambiando a ningún color. Lo descubrí yo mismo, pensé que sería útil para alguien.Para esconderse:
Para mostrar:
fuente
Pruébelo en Swift , no actualice el
tintColor
si tiene algún diseño para su UIBarButtonItem como el tamaño de fuente en AppDelegate, cambiará totalmente la apariencia de su botón cuando aparezca.En el caso de un botón de texto, cambiar el título puede hacer que su botón "desaparezca".
fuente
Descubrí otra arruga en el
tintColor
y elisEnabled
enfoque sugerido por Max y otros - cuando VoiceOver está habilitado para la accesibilidad y el botón está lógicamente oculta, la accesibilidad del cursor todavía se centrará en el botón de la barra, y el estado que está "atenuado" (es decir, porqueisEnabled
es establecido en falso). El enfoque en la respuesta aceptada no sufre este efecto secundario, pero otra solución que encontré fue establecerisAccessibilityElement
en falso al "ocultar" el botón:Y luego
isAccessibilityElement
volviendo a verdadero cuando "muestra" el botón:El hecho de que el elemento del botón de la barra todavía ocupara espacio no fue un problema en mi caso, ya que estábamos ocultando / mostrando los elementos del botón de la barra más a la izquierda.
fuente
Y ahora simplemente cambia de
isHidden
propiedad.fuente
Mejorando desde la respuesta de @lnafziger
Guarde sus Barbuttons en una salida fuerte y haga esto para ocultarlo / mostrarlo:
Cuando sea necesario, use debajo de la función.
fuente
Solo configura
barButton.customView = UIView()
y ve el trucofuente
No hay forma de "ocultar" un UIBarButtonItem, debe eliminarlo de la supervista y agregarlo nuevamente cuando desee volver a mostrarlo.
fuente
Esto está muy por debajo de la lista de respuestas, pero en caso de que alguien quiera copiar y pegar fácilmente la solución rápida, aquí está
fuente
Una forma de hacerlo es usar la
initWithCustomView:(UIView *)
propiedad de al asignar elUIBarButtonItem
. La subclase paraUIView
tendrá propiedades de ocultar / mostrar.Por ejemplo:
1. Tener un
UIButton
que quiera ocultar / mostrar.2. Haga el
UIButton
como la vista personalizada. Me gusta :3. Puede ocultar / mostrar lo
myButton
que ha creado.[myButton setHidden:YES];
fuente
Para la versión Swift, aquí está el código:
Para
UINavigationBar
:fuente
Establecer el color del texto en un color claro cuando el elemento del botón de la barra está desactivado es probablemente una opción más limpia. No hay rarezas que tengas que explicar en un comentario. Además, no destruye el botón, por lo que aún mantiene los segmentos asociados del guión gráfico.
Luego, cuando quiera que se oculte el elemento del botón de la barra, puede hacer lo siguiente:
Es lamentable que no haya propiedades ocultas, pero esto ofrece el mismo resultado.
fuente
En caso de que el elemento UIBarButtonItem tenga una imagen en lugar del texto, puede hacer esto para ocultarlo:
navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;
fuente
Algunos métodos auxiliares que pensé que compartiría basados en la respuesta aceptada de lnafziger ya que tengo múltiples barras de herramientas y múltiples botones en cada uno:
fuente
Puede obtener fácilmente la vista y ocultarla de esta manera
fuente
Si está usando Swift 3
fuente
Aquí hay una extensión que manejará esto.
USO:
fuente
Complementando la respuesta de Eli Burke, si
UIBarButtonItem
tiene una imagen de fondo en lugar de un título, puede usar el código:fuente
Necesita manipular la matriz toolbar.items.
Aquí hay un código que uso para ocultar y mostrar un botón Listo. Si su botón está en el borde extremo de la barra de herramientas o entre otros botones, sus otros botones se moverán, por lo que si desea que su botón simplemente desaparezca, coloque su botón como el último botón hacia el centro. Animé el movimiento del botón por efecto, me gusta bastante.
}
así que ahora puede usar el siguiente código para mostrar su botón
o para ocultar tu botón
fuente
En IB, si deja el título del botón en blanco, no aparecerá (¿nunca inicializado?). Hago esto a menudo durante el desarrollo durante las actualizaciones de la interfaz de usuario si quiero que un elemento del botón de barra desaparezca temporalmente para una compilación sin eliminarlo y destruir todas sus referencias de salida.
Esto no tiene el mismo efecto durante el tiempo de ejecución, establecer el título del botón en cero no hará que desaparezca todo el botón. Lo sentimos, en realidad no responde a su pregunta, pero puede ser útil para algunos.
Editar: este truco solo funciona si el estilo del botón está configurado en plano
fuente
Agregaré mi solución aquí ya que no pude encontrarla mencionada aquí todavía. Tengo un botón dinámico cuya imagen depende del estado de un control. La solución más simple para mí fue establecer la imagen
nil
si el control no estaba presente. La imagen se actualizaba cada vez que se actualizaba el control y, por lo tanto, esto era óptimo para mí. Sólo para estar seguro de que también puse elenabled
queNO
.Establecer el ancho en un valor mínimo no funcionó en iOS 7.
fuente
Con crédito a @lnafziger, @MindSpiker, @vishal, et. Alabama,
El revestimiento más simple al que llegué para un solo botón de barra derecho (o izquierdo) es:
Como en:
Probé esto y funciona para mí (con el elemento de botón de barra fuerte conectado a través de IB).
fuente