2015-09-13 19 views
21

Ich versuche eine UIBarButtonItem ein-/auszublenden. Ich habe eine barButton auf der rechten Seite in storyboard hinzugefügt. Dann in viewDidLoad, machte ich die rightBarButtonItem zu nil. Später setze ich es auf die button, die ich in der storyboard hinzugefügt habe. Hier ist mein Code ist:Show/Hide barButtonItem

// Right barButtonItem added in storybord: 
@IBOutlet weak var deleteBarButton: UIBarButtonItem! 

// viewDidLoad 
self.navigationItem.rightBarButtonItem = nil 

// Later on... 
self.navigationItem.rightBarButtonItem = self.deleteBarButton 

Als ich eingestellt self.deleteBarButton zum rightBarButtonItem, passiert nichts. Es zeigt es nicht. Was mache ich falsch und was ist der richtige/effizienteste Weg, um eine barButtonItem anzuzeigen/auszublenden?

aktualisieren

Ich habe versucht, die folgenden:

self.deleteBarButton.hidden = true 

Aber ich erhalte den folgenden Fehler:

UIBarButtonItem does not have a member named 'hidden'

+0

Ich habe meine Antwort aktualisiert –

+0

Ich habe einen Weg, füge die barbuttonitem klar (und somit nicht für den Benutzer sichtbar) –

+0

Check out „Update 2“ in meiner Antwort –

Antwort

39

Wir waren gerade die Antwort! für mich

// viewDidLoad 
self.navigationItem.rightBarButtonItem = nil 

// Later on... 
self.navigationItem.rightBarButtonItem = self.deleteBarButton 
+2

Während dies funktioniert gibt es eine bessere und unterstützte Möglichkeit, dies zu tun, die Animation unterstützt http://StackOverflow.com/a/5006889/1166266 – Sirens

+0

Ich habe versucht, 'rightBarButtonItem' zu' nil' in Objective C es funktioniert nicht –

+3

Swift 3.1 | Funktioniert großartig // viewDidLoad self.rightBarButtonAlert.isEnabled = false self.rightBarButtonAlert.tintColor = .clear – Brian

19

Update 2

Sie co uld setzen nur den Text der Schaltfläche, um nichts:

self.deleteBarButton.title = ""; 

Update 1

Ich würde die enabled Eigenschaft verwenden Sie die Schaltfläche beleuchten wie folgt (obwohl es nicht vollständig auf die Schaltfläche unsichtbar macht, ermöglicht es dem Benutzer zu wissen, es wird keine Aktion ausführen).

Dies kann als eine Variable handeln, damit Sie wissen, dass die Schaltfläche in Ihrem Fall ist versteckt:

Beleuchtet: (in ViewDidLoad)

self.deleteBarButton.enabled = true; 

Darkened: (Ort später)

self.deleteBarButton.enabled = false; 

Dann würde ich fügen sie den folgenden es vollständig verschwinden lassen:

self.navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.clearColor(); 
+0

Dank zu machen.Aber ich muss es komplett verstecken – Jessica

3

Versuchen Sie, Ihr barButton manuell in viewDidLoad zu erstellen und zeigen Sie dann Ihre Schaltfläche an.

Code:

var barButton: UIBarButtonItem! 

func viewDidLoad() { 
    super.viewDidLoad() 
    barButton = UIBarButtonItem(title: "Title", style: .Plain, target: self, action: Selector("target_function")) 
    self.navigationItem.rightBarButtonItem = barButton 
} 

func someFunction() { 
    self.navigationItem.rightBarButtonItem = nil 
    // or 
    self.navigationItem.rightBarButtonItem = barButton 
} 
1

Dieses funktioniert perfekt !!: Alles, was Sie tun müssen, ist ein strong IBOutlet, können Sie dann folgendermaßen erstellen

self.navBar.title = "" 
self.navBar.enabled = false 
+0

Dies betrifft nicht das Verbergen ein spezielles 'UIBarButtonItem' in der' navigationBar', verbirgt stattdessen vollständig die 'navigationBar'. –

+0

Eine Erweiterung UIBarButtonItem wäre viel elegantere (Swift 3) - "-Erweiterung UIBarButtonItem { func hide() { self.tintColor = UIColor.clear self.isEnabled = false } }" – Yrol

Verwandte Themen