2009-08-04 11 views
14

Arabirim Oluşturucu aracılığıyla nav.bar'un sol tarafına BarButton öğeyi ekledim ve kodda bunu yalnızca tablo görünümünün düzenleme modunda göstermesini istiyorum. (: self.navigationItem.leftBarButtonItem.hidden = YES gibi) Ama leftBarButtonItem ayarlamak için herhangi bir gizli özelliği bulamadık.Gizleme UINavigationItem'in çubuğu düğmesi

Sadece enabled özelliğini ayarlayabilirsiniz. leftBarButtonItem'un gizliliğini nasıl kontrol edeceğini ve nasıl kullanılacağını bilen herhangi biri lütfen yardım edin.

cevap

7

Ben bunun nil dışarı etmektir "gizlemek" için tek yol eminim.

self.navigationItem.leftBarButtonItem = nil; 

o temelde saklamak yerine Düğmenizin kurtulur çünkü, sorunuzun mükemmel cevap değil ama. Yeniden oluşturmanız veya orijinal düğmenizin etrafında durmanız ve solBarButtonItem öğesini UIBarButtonItem öğenize geri döndürmeniz gerekir.

+0

Cevabınız için teşekkür ederiz. Aslında saklanamazsam böyle bir yaklaşımı düşünüyordum. – Sreehari

2

çubuk öğeleri gizli bir özelliği vardır önermek için belgelerinde bir şey yok. Kullanıcı düzenleme değilken

Neden sonra,

self.navigationItem.leftBarButtonItem = nil; 

set kullanıcı düzenleme olduğunda

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

kurdu? Bu, düğmeyi her seferinde yeniden oluşturmayı veya görünümün yaşam döngüsü boyunca saklamayı gerektirir. Ne yazık ki acı verici, ama hayır, .hidden bir mülk kadar kolay değil.

+0

Neil bana bunu yendi - tam olarak. –

55

Bu gizlemek için başka hiçbir yolu yoktur gibi

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

kullanabilirsiniz kendim

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

Bazı durumlarda, benim için işe yaramadı, ancak YES'e hidesBackButton ayarı işe yaradı! Teşekkürler. –

+1

Gezinme, gezinme denetleyicisinin bir alt görünümünde bulunuyorsanız bir geri düğmesi göstermek için varsayılan davranışını izleyecektir. Bu nedenle, gösterilecek bir şey istemiyorsanız hidesBackButton öğesini true olarak ayarlamanız gerekir. Hiç – Nycen

+1

Bunun "viewDidLoad" zamanında çalışmadığını, ancak "viewWillAppear:" zamanında çalıştığını tespit ediyorum. – ThomasW

1

çalıştı çalışır. sadece devre dışı bırakın.

3

ben hemen altında kendi "gizlemek" fonksiyonu göstermek oluşturuldu: mi

- (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:)]; 

    } 
} 

Sadece bunu arayabilirsiniz:

[self hideClearButton:YES]; //hide it 

veya

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

gizlemek için/

devre dışı
[self.navigationItem.leftBarButtonItem setEnabled:FALSE]; 
.210

göstermek/Anahtar Eğer leftBarButtonItem nilling önce düğme öğesine güçlü referansına sahip olduğundan emin olmaktır

// Hide 
self.navigationItem.leftBarButtonItem = nil; 

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

kullanabilirsiniz

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

Doğru, Ama Doğru ve Yanlış da çekicilik gibi çalışır! – pkc456

+1

Yeterince adil. Sadece objektif-C sözdizimine yapışmanın okunabilirliğe yardımcı olduğunu düşünün. Bu durumda sanırım alakasız. – Tander

4

sağlamak.Ben tekrar göstermek istediğini ve daha hiç tekrar bir düğme oluşturmak istiyorum çünkü o nil yapım

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

bir seçenek değildi. yaptım ne yani

benim için

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

Works oldu. (solBarButtonItem, customView kullanılarak oluşturuldu)

Yardım edin.

0

bana

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

Bu çözüm çalışmaları bu yapmak kolay fonksiyonu var. Böyle bir navigasyon var. Navigation Bar Arayüz Oluşturucu formunda gelir, arka plan görüntüsüne sahiptir.

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

Çok kolay ama benim için çalışır: Eğer/gizlemek tarafından gösterebilirim

@IBOutlet weak var memberBtn: UIBarButtonItem! 

. TintColor'u istediğiniz gibi değiştirebilirsiniz. Yardım dilerim:]