2015-09-13 16 views
21

Próbuję pokazać/ukryć UIBarButtonItem. Dodałem barButton po prawej stronie w storyboard. Następnie w viewDidLoad, zrobiłem rightBarButtonItem do nil. Później ustawiłem go na button dodany w storyboard. Oto mój kod:Pokaż/Ukryj barButtonItem

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

// viewDidLoad 
self.navigationItem.rightBarButtonItem = nil 

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

Kiedy ustawić self.deleteBarButton do rightBarButtonItem, nic się nie dzieje. Nie pokazuje tego. Co robię źle i jaki jest prawidłowy/najbardziej efektywny sposób pokazania/ukrycia barButtonItem?

Aktualizacja

Próbowałem następujące:

self.deleteBarButton.hidden = true 

Ale pojawia się następujący błąd:

UIBarButtonItem does not have a member named 'hidden'

+0

I zostały zaktualizowane moją odpowiedź –

+0

Dodałem sposób dokonania barbuttonitem jasne (a zatem nie jest widoczna dla użytkownika) –

+0

Check out „Update 2” w moim odpowiedź –

Odpowiedz

39

Właśnie dostałem odpowiedź! Wszystko co musisz zrobić, to stworzyć strong IBOutlet, można wykonać następujące czynności:

// viewDidLoad 
self.navigationItem.rightBarButtonItem = nil 

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

Podczas tej operacji istnieje lepszy i obsługiwany sposób, aby to zrobić, który obsługuje animację http://stackoverflow.com/a/5006889/1166266 – Sirens

+0

Próbowałem przypisanie 'rightBarButtonItem' do' nil' w Objective C to nie działa –

+3

Swift 3.1 | Działa świetnie | // viewDidLoad self.rightBarButtonAlert.isEnabled = false self.rightBarButtonAlert.tintColor = .clear – Brian

19

Aktualizacja 2

możliwość współpracy uld wystarczy ustawić tekst przycisku do niczego:

self.deleteBarButton.title = ""; 

Update 1

chciałbym użyć właściwości enabled do oświetlania przycisk w następujący sposób (choć nie całkowicie uczynić przycisk niewidoczny, pozwala użytkownik, aby wiedzieć, że nie wykona akcji).

To może działać jako zmienna, aby poinformować, że przycisk jest ukryty w Twoim przypadku:

Illuminated (miejsce w viewDidLoad)

self.deleteBarButton.enabled = true; 

Darkened: (miejsce później)

self.deleteBarButton.enabled = false; 

Następnie dodam następujące aby całkowicie zniknąć:

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

Dzięki.Ale muszę to całkowicie ukryć – Jessica

3

Spróbuj ręcznie utworzyć barButton w viewDidLoad, a następnie pokaż/ukryj swój przycisk.

Kod:

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

Ten działa idealny dla mnie !!

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

Nie dotyczy to ukrywania specyficzny 'UIBarButtonItem' w' navigationBar', zamiast tego całkowicie ukrywa 'navigationBar'. –

+0

Rozszerzenie UIBarButtonItem byłby znacznie bardziej elegancki (Swift 3) - "rozszerzenie UIBarButtonItem { func hide() { self.tintColor = UIColor.clear self.isEnabled = false } }" – Yrol