2009-08-04 32 views
14

Dodałem element BarButton po lewej stronie nav.bar za pomocą kreatora interfejsów oraz w kodzie Chcę tego tylko pokazać w trybie edycji mojego widoku tabeli. Ale nie znalazłem żadnej ukrytej właściwości, aby ustawić leftBarButtonItem (np .: self.navigationItem.leftBarButtonItem.hidden = YES).Ukrywanie przycisku paska UINavigationItem

Mogę ustawić tylko właściwość enabled. Każdy wie, jak kontrolować ukryj i pokaż właściwość leftBarButtonItem, pomóż.

Odpowiedz

7

Jestem prawie pewien, że jedynym sposobem "ukrycia się" jest wyeliminowanie tego.

self.navigationItem.leftBarButtonItem = nil; 

Chociaż nie jest to idealna odpowiedź na twoje pytanie, ponieważ w zasadzie pozbędzie się go zamiast go ukryć. Musisz albo odtworzyć go, albo zachować oryginalny przycisk i po prostu ustawić leftBarButtonItem z powrotem na twój UIBarButtonItem.

+0

Dzięki za odpowiedź. Myślałem też o takim podejściu, jeśli nie mogę się ukryć. – Sreehari

2

W dokumentacji nie ma nic, co sugerowałoby, że elementy paska mają ukrytą własność.

Dlaczego nie ustawić

self.navigationItem.leftBarButtonItem = nil; 

gdy użytkownik nie edytuje, a następnie ustawić

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

gdy użytkownik edytuje? Wymaga to albo ponownego utworzenia przycisku za każdym razem, albo przechowywania go przez cały cykl życia tego widoku. Nie jest też strasznie bolesna, ale nie, nie tak łatwa jak ukryta własność.

+0

Neil pobił mnie do tego - dokładnie. –

55

Działa to próbowałem to sam

self.navigationItem.leftBarButtonItem = nil; 
self.navigationItem.hidesBackButton = YES;  
+3

W niektórych przypadkach ustawienie go na zero nie działało dla mnie, ale ustawienie hidesBackButton na YES zadziałało! Dzięki. –

+1

Ustawienie wartości nil pozwoli nawigacjiItem postępować zgodnie z domyślnym zachowaniem, czyli pokazywać przycisk wstecz, jeśli znajdujesz się w podglądzie kontrolera nawigacyjnego, dlatego musisz również ustawić wartość hidesBackButton na true, jeśli nie chcesz niczego pokazywać kiedykolwiek – Nycen

+1

Stwierdzam, że to nie działa w czasie 'viewDidLoad', ale działa w' viewWillAppear: 'czasie. – ThomasW

1

Można użyć

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

jak nie ma innego sposobu, aby ją ukryć. więc po prostu go wyłącz.

3

Właśnie stworzył własną "ukryć" Funkcja pokazu poniżej:

- (void)hideClearButton:(BOOL)hide { 

    if (hide) { 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
    else { 
     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
               initWithTitle:NSLocalizedString(@"Clear", @"Recents") 
               style:UIBarButtonItemStylePlain 
               target:self action:@selector(clearAll:)]; 

    } 
} 

można po prostu nazwać to lubią:

[self hideClearButton:YES]; //hide it 

lub

[self hideClearButton:NO]; //show it 
1

Aby ukryć/wyłączyć

[self.navigationItem.leftBarButtonItem setEnabled:FALSE]; 

Aby pokazać/enable

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 
+0

Dobrze, ale prawda i fałsz również działają jak urok! – pkc456

+1

Uczciwe, że tak. Po prostu myśl, że trzymanie się składni C w celu poprawienia czytelności. W tym przypadku nie ma to znaczenia. – Tander

4

Można użyć

// Hide 
self.navigationItem.leftBarButtonItem = nil; 

// Show 
self.navigationItem.leftBarButtonItem = self.myBarButtonItem 

Kluczem jest upewnienie się, że masz silną odniesienie do elementu przycisku przed nilling leftBarButtonItem.

@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem; 
0

Dobrze, że nie było to możliwe, ponieważ chciałem pokazać to jeszcze raz i nie chciałem ponownie tworzyć przycisku.

więc co zrobiłem było

UIBarButtonItem *barButton = (UIBarButtonItem *)self.navBar.topItem.leftBarButtonItem; 
barButton.customView.hidden = true;//Hide 
barButton.customView.hidden = false;//Show 

pracuje dla mnie. (mój leftBarButtonItem został utworzony przy użyciu customView)

Mam nadzieję, że to pomaga.

0

Ta praca rozwiązanie dla mnie

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)]; 
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView]; 
self.navigationItem.leftBarButtonItem = btnL; 
0

Mam funkcji łatwego dokonania tego. Mam taką nawigację. Navigation Bar Pochodzi z Konstruktora interfejsu, ma obraz tła.

@IBOutlet weak var memberBtn: UIBarButtonItem! 

można ukryć/pokazać go:

func hideMemberBtn() { 
    memberBtn.isEnabled = false 
    memberBtn.tintColor = UIColor.clear 
} 
func showMemberBtn() { 
    memberBtn.isEnabled = true 
    memberBtn.tintColor = UIColor.white 
} 

Jest to łatwe, ale to praca dla mnie. Możesz zmienić kolor TintColor według potrzeb. Hope o pomoc:]

Powiązane problemy