swift condition uibarbuttonitem iboutlet

Haga que un UIBarButtonItem desaparezca con swift IOS



condition iboutlet (15)

¿Realmente quieres ocultar / mostrar creeLigueBouton ? En cambio, es mucho más fácil habilitar / deshabilitar sus UIBarButtonItems. Harías esto con unas pocas líneas:

if(condition == true) { creeLigueBouton.enabled = false } else { creeLigueBouton.enabled = true }

Este código puede incluso reescribirse de una manera más corta:

creeLigueBouton.enabled = !creeLigueBouton.enabled

Vamos a verlo en una subclase UIViewController:

import UIKit class ViewController: UIViewController { @IBOutlet weak var creeLigueBouton: UIBarButtonItem! @IBAction func hide(sender: AnyObject) { creeLigueBouton.enabled = !creeLigueBouton.enabled } }

Si realmente desea mostrar / ocultar creeLigueBouton , puede usar el siguiente código:

import UIKit class ViewController: UIViewController { var condition: Bool = true var creeLigueBouton: UIBarButtonItem! //Don''t create an IBOutlet @IBAction func hide(sender: AnyObject) { if(condition == true) { navigationItem.rightBarButtonItems = [] condition = false } else { navigationItem.rightBarButtonItems = [creeLigueBouton] condition = true } } override func viewDidLoad() { super.viewDidLoad() creeLigueBouton = UIBarButtonItem(title: "Creer", style: UIBarButtonItemStyle.Plain, target: self, action: "creerButtonMethod") navigationItem.rightBarButtonItems = [creeLigueBouton] } func creerButtonMethod() { print("Bonjour") } }

Tengo un IBOutlet al que he vinculado desde el guión gráfico

@IBOutlet var creeLigueBouton: UIBarButtonItem!

Y quiero que desaparezca si una condición es cierta.

if(condition == true) { // Make it disappear }


Es bastante tarde para responder, pero buscando una respuesta para mi problema, encontré este tema. La respuesta marcada no me ayudó, pero logré resolver mi problema gracias a la respuesta de @haiLong. Mi solución funciona para todos los tipos de botones de barra ... creo. Agregue esto a su ViewController y utilícelo según sea necesario.

var tintColorsOfBarButtons = [UIBarButtonItem: UIColor]() func hideUIBarButtonItem(button: UIBarButtonItem) { if button.tintColor != UIColor.clear { tintColorsOfBarButtons[button] = button.tintColor button.tintColor = UIColor.clear button.isEnabled = false } } func showUIBarButtonItem(button: UIBarButtonItem) { if tintColorsOfBarButtons[button] != nil { button.tintColor = tintColorsOfBarButtons[button] } button.isEnabled = true }

Espero que le ahorre tiempo a otros desarrolladores :)


Heres mi solución:

esconder:

self.creeLigueBouton.title = "" self.creeLigueBouton.style = UIBarButtonItemStyle.Plain self.creeLigueBouton.enabled = false

espectáculo:

self.creeLigueBouton.title = "Original Button Text" self.creeLigueBouton.style = UIBarButtonItemStyle.Bordered self.creeLigueBouton.enabled = true


La siguiente solución funciona para mí.

var skipButton: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton skipButton.frame = CGRectMake(10.0, 0.0, 58.0, 32.0); skipButton.setTitle("Skip", forState: UIControlState.Normal) skipButton.setTitleColor(UIColor(red: 0.0, green: 122.0/255.0, blue: 255.0/255.0, alpha: 1.0), forState: UIControlState.Normal) skipButton.addTarget(self, action: "rightButtonAction:", forControlEvents: UIControlEvents.TouchUpInside) var skipButtonItem = UIBarButtonItem(customView: skipButton) self.navigationItem.rightBarButtonItem = skipButtonItem; if hideSkipButton == true { self.navigationItem.rightBarButtonItem = nil }


Lo hice usando esto:

navigationItem.setHidesBackButton(true, animated: true)


Prueba esto. (Hacer la variable global newbackbutton)

anular func viewDidLoad () {

let newBackButton = UIBarButtonItem() newBackButton.title = " << Return to Gallery" newBackButton.style = UIBarButtonItemStyle.Done newBackButton.target = self newBackButton.action = "backtoScoutDetail:" self.navigationItem.rightBarButtonItem = newBackButton

}

override func viewWillAppear(animated: Bool) { newBackButton.title = "" self.navigationItem.rightBarButtonItem = newBackButton }


Puedes usar atributos de texto para ocultar un botón de barra:

barButton.enabled = false barButton.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: .Normal)

También he hecho una extensión para UIBarButtonItem con una propiedad oculta:

extension UIBarButtonItem { var titleTextAttributes: [NSObject : AnyObject]! { set { setTitleTextAttributes(newValue, forState: .Normal) } get { return titleTextAttributesForState(.Normal) } } private static var savedAttributesKey = "savedAttributes" var savedAttributes: [NSObject : AnyObject]? { set { objc_setAssociatedObject(self, &UIBarButtonItem.savedAttributesKey, newValue, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) } get { return objc_getAssociatedObject(self, &UIBarButtonItem.savedAttributesKey) as? [NSObject : AnyObject] } } var hidden: Bool { set { enabled = !newValue if newValue { savedAttributes = titleTextAttributes // Set a clear text color var attributes = titleTextAttributes attributes[NSForegroundColorAttributeName] = UIColor.clearColor() titleTextAttributes = attributes } else { titleTextAttributes = savedAttributes } } get { return enabled } } }


Si ha configurado UIBarButtonItem s para ocultar, por ejemplo, solo mostrarlos en orientación Horizontal, y ocultar o Vertical, puede usar la etiqueta y el filtro Swift Array. Asumamos que @IBOutlet enlace UIToolBar a UIToolBar :

@IBOutlet weak var toolbar: UIToolbar!

Primero, guardamos los elementos de la barra de herramientas en viewDidLoad :

override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. toolbarItems = toolbar.items }

Establezca la propiedad de etiqueta de UIBarButtonItem que desea mostrar en orientación Horizontal en 1 o lo que quiera. Luego, anule la función traitCollectionDidChange

override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) switch (traitCollection.horizontalSizeClass, traitCollection.verticalSizeClass) { case (.Compact, .Regular): // iPhone Portrait let items: [UIBarButtonItem]? if view.frame.width > 320 { // iPhone 6 & 6S items = toolbarItems?.filter({ $0.tag < 5 }) } else { items = toolbarItems?.filter({ $0.tag < 4 }) } bottomToolbar.setItems(items, animated: true) case (_, .Compact): // iPhone Landscape let items = toolbarItems?.filter({ $0.tag < 6 }) bottomToolbar.setItems(items, animated: true) default: // iPad break } }

En este ejemplo, establecí todas las etiquetas de UIBarButtonItem para iPad solo en 6, iPhone Landscape en 5 y para iPhone 6 y 6+ en 4.


Tengo más de 2 menuitems y eliminar / agregar menuitem es una sobrecarga. Este fragmento de código funcionó para mí (utilizando Swift3) .

func showMenuItem(){ menuItemQuit.customView?.isHidden = false menuItemQuit.plainView.isHidden = false } func hideMenuItem(){ menuItemQuit.customView?.isHidden = true menuItemQuit.plainView.isHidden = true }


Tuve el mismo problema con una barra de herramientas que tuve que ocultar y mostrar su último botón. Así que declaré una var para mantener el UIBarButtonItem y lo quité de la barra o lo agregué dependiendo de la situación como:

Dentro de la clase declaré la var y enlazé la barra de herramientas:

var buttonToHide : UIBarButtonItem? @IBOutlet weak var toolbarOne: UIToolbar!

en el viewDidLoad:

buttonToHide = toolbarOne.items![toolbarOne.items!.count - 1] as? UIBarButtonItem

en mi código hice el truco:

if situationOccurrsToHide { toolbarOne.items!.removeLast() }

o

if situationOccursToShow { toolbarOne.items!.append(buttonToHide!) }

Puede usar removeAtIndex o insert (buttonToHide, atIndex: xx) para eliminar o volver a insertar el botón en una posición específica.

Debe tener cuidado de no insertar o quitar el botón más de una vez.

Espero eso ayude.


Usa la propiedad habilitada y tintColor

let barButtonItem:UIBarButtonItem? = nil if isHidden{ barButtonItem?.enabled = false barButtonItem?.tintColor = UIColor.clearColor() }else{ barButtonItem?.enabled = true barButtonItem?.tintColor = nil }


Para Swift 3

if (Show_condition) { self.navigationItem.rightBarButtonItem = self.addAsset_btn } else { self.navigationItem.rightBarButtonItem = nil }


Primera forma:

Solo establece .title en ""

Segunda forma:

Simplemente llame a updateToolBar() cuando quiera mostrar / ocultar el creeLigueBouton .

func updateToolBar() { var barItems: [UIBarButtonItem] = [] if condition != true { // Make it appear barItems.append(creeLigueBouton) } barItems.append(anotherButton) myToolBar.setItems(barItems, animated: true) myToolBar.setNeedsLayout() }


// Nice answer haiLong, I think as an extension this is more convenient. extension UIBarButtonItem { var isHidden: Bool { get { return !isEnabled && tintColor == .clear } set { tintColor = newValue ? .clear : nil isEnabled = !newValue } } }

EDITAR: Se eliminó el desempaque forzado y el valor habilitado fijo


Try these: self.navigationController?.navigationBar.backItem?.title = "" navigationItem.backBarButtonItem?.title = "" navigationItem.leftBarButtonItem?.title = "" navigationItem.hidesBackButton = true navigationItem.setLeftBarButtonItem(nil, animated: true) navigationItem.setRightBarButtonItem(nil, animated: true)