Bir UIBarButtonItem öğesini nasıl gösterebilir / gizleyebilirim?


251

IB'de birkaç düğmeyle bir araç çubuğu oluşturdum. Ana penceredeki verilerin durumuna bağlı olarak düğmelerden birini gizlemek / göstermek istiyorum.

UIBarButtonItem gizli bir özelliği yok ve bunları gizlemek için şimdiye kadar bulduğum herhangi bir örnek, nav bar düğmelerini nil olarak ayarlamayı içeriyor, bu yüzden burada yapmak istediğimi sanmıyorum çünkü düğmeyi tekrar göstermem gerekebilir (değil Bahsetmek gerekirse, eğer düğümü bir IBOutlet'e bağlarsam, bunu nil'e ayarlarsam, nasıl geri alacağımı bilmiyorum).


Basitçe devre dışı bıraktım ve düğmenin özelliğinin mevcut olmadığını belirten bir erişilebilirlik etiketi ekledim.
Daniel Springer

Yanıtlar:


263

Düğmenizi güçlü bir prize kaydedin (diyelim myButton) ve eklemek / kaldırmak için bunu yapın:

// Get the reference to the current toolbar buttons
NSMutableArray *toolbarButtons = [self.toolbarItems mutableCopy];

// This is how you remove the button from the toolbar and animate it
[toolbarButtons removeObject:self.myButton];
[self setToolbarItems:toolbarButtons animated:YES];

// This is how you add the button to the toolbar and animate it
if (![toolbarButtons containsObject:self.myButton]) {
    // The following line adds the object to the end of the array.  
    // If you want to add the button somewhere else, use the `insertObject:atIndex:` 
    // method instead of the `addObject` method.
    [toolbarButtons addObject:self.myButton];
    [self setToolbarItems:toolbarButtons animated:YES];
}

Prizde depolandığından, araç çubuğunda olmasa bile ona bir referans tutabilirsiniz.


73
Gezinti denetleyicisindeki sağ düğmemin bu çalışmasını sağlamak için toolBarItems ve setToolBarItems yerine self.navigationItem.rightBarButtonItems ve [self.navigationItem setRightBarButtonItems <prams>] kullandım.
MindSpiker

@MindSpiker: Evet, aynı teknik bir gezinti çubuğundaki düğmeler için de çalışıyor.
lnafziger

1
dealloc içinde myButton nil zorunda mıyım?
Van Du Tran

49
Veya Apple az önce .hidden mülk ekleyebilirdi. -_-
GeneCode

217

Bu cevabın bu soruya geç olduğunu biliyorum. Ancak, başka herhangi bir kişinin benzer bir durumla karşılaşması yardımcı olabilir.

İOS 7'de, bir çubuk düğmesi öğesini gizlemek için aşağıdaki iki tekniği kullanabiliriz: -

  • kullanın SetTitleTextAttributes: - Bu "Bitti", "Kaydet" vb gibi bar düğmesi öğeleri üzerinde harika çalışıyor. Ancak, metin olmadığı için Ekle, Çöp sembolü vb (en azından benim için değil) gibi öğeler üzerinde çalışmaz.
  • kullanın TintColor: - Ben "deleteButton" adlı bir bar düğmesi öğesi varsa: -

Düğmeyi gizlemek için aşağıdaki kodu kullandım: -

[self.deleteButton setEnabled:NO]; 
[self.deleteButton setTintColor: [UIColor clearColor]];

Düğmeyi tekrar göstermek için aşağıdaki kodu kullandım: -

[self.deleteButton setEnabled:YES];
[self.deleteButton setTintColor:nil];

[self.navigationItem.rightBarButtonItem setEnabled: NO]; [self.navigationItem.rightBarButtonItem setTintColor: [UIColor clearColor]];
Leon

3
Swift için: deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()devre dışı bırakmak ve gizlemek, deleteButton.enabled = true; deleteButton.tintColor = nilnormal olarak yeniden etkinleştirmek ve göstermek için.
Unixmonkey

1
Bu yaklaşım bana bu sınıf içinde UIBarButton görüntülemek ya da görüntülemek için mantık koymak sağlar gibi. Sadece bir düğmeyle çalışmasının nedeni hemen belli değildir - bir düğmeyi bu şekilde gizlerseniz yine de yer kaplar, bu nedenle birden fazla düğmeniz varsa boş bir boşluğunuz olabilir.
SimplGy

İlk yaklaşımın benim için mükemmeldi. Ben set UIColor.cleariçin UIControlState.disabledve gösterebiliriz / düğmeye gizlemek setEnabled. Tabii belirttiğiniz gibi, bu sadece metin düğmeleri için çalışır.
fl034

Büyük bir görüntüde (muhtemelen erişilebilirlik için) görünene kadar uzun süre basarsam, isEnabled öğesi false olarak ayarlanmış olsa bile yine de çalışır.
Daniel Springer

67

İşte basit bir yaklaşım:

hide:  barbuttonItem.width = 0.01;
show:  barbuttonItem.width = 0; //(0 defaults to normal button width, which is the width of the text)

Sadece retina iPad'imde çalıştırdım ve .01 görünmemesi için yeterince küçük.


13
Tüm çözümler arasında bu, hızlı, kirli ve etkiliydi. Ayrıca barbuttItem.enabled = NO; çünkü eğer yeteri kadar vurursam düğmeye basabilirim.
Stickley

1
Benim için çalışmıyor. Ben '+' görüntüsü ile bir Ekle düğmesi kullandığımı düşündüm, ama onun yerine "Yeni" metniyle Özel bir düğme denedim ve hala yok değil. Benim kod yürütülüyor biliyorum etkinleştirme değişir. Herhangi bir fikir? Bu düğmenin bir film şeridinde oluşturulduğunu ve bir segue olduğunu unutmayın, bunun yerine programlı bir düğmeye geçmek istemiyorum
Rhubarb

19
Gezinti denetleyicisi araç çubuğunda çalışmıyor gibi görünüyor, ancak diğer araç çubukları için de çalışıyor.
Drew Rosenberg

3
Gizler ama musluklara hala yanıt verir. Benim için görünmez bir düğme gibi davranıyor.
Tibidabo

self.window?.tintColor = APP_PRIMARY_COLORAppdelegate'te bu satırı kullanarak global renk tonu ayarladıysanız, bu işe yaramaz
Mehul Thakkar

60

Bir düğmeyi genişliğini değiştirmeden veya çubuktan çıkarmadan yerinde gizlemek mümkündür. Stili düz olarak ayarlarsanız, başlığı kaldırır ve düğmeyi devre dışı bırakırsanız, kaybolur. Geri yüklemek için değişikliklerinizi geri almanız yeterlidir.

-(void)toggleBarButton:(bool)show
{
    if (show) {
        btn.style = UIBarButtonItemStyleBordered;
        btn.enabled = true;
        btn.title = @"MyTitle";
    } else {
        btn.style = UIBarButtonItemStylePlain;
        btn.enabled = false;
        btn.title = nil;
    }
}

2
Bu sadece btn.title = nil ayarlayarak benim için çalıştı. Ben de her durumda etkin = HAYIR ayarlıyorum ...
Pork 'n' Bunny

3
ButtonItem.title öğesini nil olarak ayarlamak iOS7'de benim için çalışmadı. Düğme geri ayarlanırken yeniden görünmedi. Ancak işe yarayan buttonItem.title = @ "" ayarıydı;
Mark Knopper

42

Aşağıda benim Navigasyon Çubuğu arıyor olsa benim çözümdür.

navBar.topItem.rightBarButtonItem = nil;

Burada "navBar" XIB görünümünde NavigationBar bir IBOutlet olduğunu Burada düğmeyi gizlemek veya bazı koşullara göre göstermek istedim. Yani im "Durum" koşul için test ve eğer doğruysa ben hedef görünümün viewDidLoad yönteminde nil için düğmeye ayarlıyorum.

Bu, sorununuzla tam olarak ilgili olmayabilir, ancak NavigationBar'daki düğmeleri gizlemek istiyorsanız benzer bir durum


Daha sonra rightBarButtonItemtekrar ayarlamak isterseniz , düğme öğesinin güçlü bir IBOutlet'te saklandığından emin olun, böylece gezinti çubuğundan çıktığınızda serbest bırakılmaz.
Nate

30

Swift 3 ve Swift 4 için aşağıdakileri gizlemek için bunu yapabilirsiniz UIBarButtomItem:

self.deleteButton.isEnabled = false
self.deleteButton.tintColor = UIColor.clear

Ve şunu göstermek için UIBarButtonItem:

self.deleteButton.isEnabled = true
self.deleteButton.tintColor = UIColor.blue

On tintColorsizin için kullandığınız kökenli rengini belirtmek için gerekenUIBarButtomItem


2
Ancak bu, bu düğme için hala yer kaplayacaktır.
Makalele

22

Şu anda iOS 7.1'i hedefleyen OS X Yosemite Developer Preview 7 ve Xcode 6 beta 6 kullanıyorum ve aşağıdaki çözüm benim için iyi çalışıyor:

  • UINavigationItemVe UIBarButtonItems için çıkış oluştur
  • Kaldırmak için aşağıdaki kodu çalıştırın

    [self.navItem setRightBarButtonItem:nil];
    [self.navItem setLeftBarButtonItem:nil];
  • Düğmeleri tekrar eklemek için aşağıdaki kodları çalıştırın

    [self.navItem setRightBarButtonItem:deleteItem];
    [self.navItem setLeftBarButtonItem:addItem];

Teşekkürler, bu da bulduğum en iyi yöntem. Düğmelerinize olan referanslarınızın güçlü olduğundan emin olun.
jyoung

Ayrıca, bunun yalnızca bir düğmeniz varsa işe yaradığını unutmayın. Örnek, o taraftaki TÜM düğmeleri kaldıracaktır.
lnafziger

@jyoung Bu benim için çalıştı, ancak referansın güçlü olması neden önemli? Ben başka bir şekilde denemedim, ama genellikle varsayılan olmadığı için bu şekilde ayarlamayın.
Robert

@Robert Nesneyi daha sonra kullanmak istiyorsunuz, bu nedenle nil olarak ayarladığınızda nesnenin çöp toplanmadığından emin olmanız gerekir. Çubuk düğmesi öğesine söylediğinizde başka hiçbir şey nesneyi alamasaydı, ondan kurtulmanın uygun olduğunu, referans sayısı 0 olur ve çöp toplanır.
jyoung

14

Projemde IBOutlets kullandım. Benim çözümüm şuydu:

@IBOutlet weak var addBarButton: UIBarButtonItem!

addBarButton.enabled = false
addBarButton.tintColor = UIColor.clearColor()

Ve bu çubuğu tekrar göstermeniz gerektiğinde, ters çevrilmiş özellikleri ayarlayın.

In Swift 3 yerine enablekullanmak isEnableözelliğini.


13

self.dismissButton.customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];


12

iOS 8. Özel resimli UIBarButtonItem. Birçok farklı yol denedim, çoğu yardımcı olmadı. Max'in çözümü, setTintColorherhangi bir renge dönüşmüyordu. Bunu kendim anladım, bazılarına faydalı olacağını düşündüm.

Gizlemek için:

[self.navigationItem.rightBarButtonItem setEnabled:NO];
[self.navigationItem.rightBarButtonItem setImage:nil];

Göstermek için:

[self.navigationItem.rightBarButtonItem setEnabled:YES];
[self.navigationItem.rightBarButtonItem setImage:image];

9

Swift'te deneyin tintColor, UIBarButtonItem'iniz için AppDelegate'teki yazı tipi boyutu gibi bir tasarımınız varsa güncelleme yapmayın, gösterildiğinde düğmenizin görünümünü tamamen değiştirecektir.

Metin düğmesi olması durumunda, başlığı değiştirmek düğmenizin 'kaybolmasına' neden olabilir.

if WANT_TO_SHOW {
    myBarButtonItem.enabled = true
    myBarButtonItem.title = "BUTTON_NAME"
}else{
    myBarButtonItem.enabled = false
    myBarButtonItem.title = ""
}

7

Ve ben başka bir kırışıklık keşfetti tintColorveisEnabled Max ve başkaları tarafından önerilen yaklaşımı - VoiceOver erişilebilirlik için etkindir ve düğme zaman mantıksal erişilebilirlik imleç hala çubuğu düğmesi üzerinde durulacak, gizli ve devlet onu ( "soluk" olduğunu, yani çünkü isEnabledDİR yanlış olarak ayarlanır). Kabul edilen cevaptaki yaklaşım bu yan etkiden muzdarip değildir, ancak bulduğum başka bir çalışma isAccessibilityElement, düğmeyi "gizlediğinde" yanlış olarak ayarlamaktı :

deleteButton.tintColor = UIColor.clear
deleteButton.isEnabled = false
deleteButton.isAccessibilityElement = false

Ve sonra isAccessibilityElementdüğmeyi "gösterirken" true değerine geri döner:

deleteButton.tintColor = UIColor.blue
deleteButton.isEnabled = true
deleteButton.isAccessibilityElement = true

Çubuk düğme öğesinin hala yer kaplaması benim durumumda bir sorun değildi, çünkü sağ çubuk düğmesi öğelerinin en solunu gizliyor / gösteriyoruz.


6
@IBDesignable class AttributedBarButtonItem: UIBarButtonItem {

    var isHidden: Bool = false {

        didSet {

            isEnabled = !isHidden
            tintColor = isHidden ? UIColor.clear : UIColor.black
        }
    }
}

Ve şimdi sadece isHiddenözelliği değiştirin .


5

@Lnafziger yanıtından iyileştirme

Barbuttonlarınızı güçlü bir prize kaydedin ve gizlemek / göstermek için bunu yapın:

-(void) hideBarButtonItem :(UIBarButtonItem *)myButton {
    // Get the reference to the current toolbar buttons
    NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];

    // This is how you remove the button from the toolbar and animate it
    [navBarBtns removeObject:myButton];
    [self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
}


-(void) showBarButtonItem :(UIBarButtonItem *)myButton {
    // Get the reference to the current toolbar buttons
    NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];

    // This is how you add the button to the toolbar and animate it
    if (![navBarBtns containsObject:myButton]) {
        [navBarBtns addObject:myButton];
        [self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
    }
}

Gerektiğinde aşağıdaki Fonksiyonu kullanın ..

[self showBarButtonItem:self.rightBarBtn1];
[self hideBarButtonItem:self.rightBarBtn1];

5

Sadece Set barButton.customView = UIView()ve Hile görmek


Bu cevabın yaptığı, tüm esnek boyutlandırmanın çalışmasına izin vermektir. Aslında çok etkili bir cevap. Muhtemelen bir uzantı ile birleştiğinde mükemmel olurdu.
Adrian_H

4

Bir UIBarButtonItem "gizlemek" için hiçbir şekilde superView kaldırmak ve tekrar görüntülemek istediğinizde geri eklemek gerekir.


Bu aslında doğru değil - Max tarafından açıklanan yöntem iyi çalışıyor.
kuzeyli

1
nothernman - Max aslında doğru değil. Aslında düğmeyi çoğu insanın "gizleme" yi tanımladığı şekilde saklamıyor. Sadece görünür kılmıyor ve kullanıcı etkileşimini devre dışı bırakıyor. Düğme hala orada ve yer kaplıyor. "Gizle" yi nasıl tanımlamak istediğinize iniyor, inanıyorum ki orijinal sorunun ruhu onu sadece görünmez kılmak değil, kaldırmak / eklemek istiyordu.
Michael Peterson

4

Bu, cevap listesinin çok aşağısındadır, ancak birisinin hızlı çözüm için kolay bir kopyala yapıştır istemesi durumunda, işte burada

func hideToolbarItem(button: UIBarButtonItem, withToolbar toolbar: UIToolbar) {
    var toolbarButtons: [UIBarButtonItem] = toolbar.items!
    toolbarButtons.removeAtIndex(toolbarButtons.indexOf(button)!)
    toolbar.setItems(toolbarButtons, animated: true)
}

func showToolbarItem(button: UIBarButtonItem, inToolbar toolbar: UIToolbar, atIndex index: Int) {
    var toolbarButtons: [UIBarButtonItem] = toolbar.items!
    if !toolbarButtons.contains(button) {
        toolbarButtons.insert(button, atIndex: index)
        toolbar.setItems(toolbarButtons, animated:true);
    }
}

Kötü değil, ancak bir UIBarButtonItem'i gizlemeyi istediği için parametre olarak bir UINavigationItem vermelisiniz ve UIToolbar değil. İşlevinizi şu şekilde değiştirdim: func hideToolbarItem (düğme: UIBarButtonItem, withToolbar araç çubuğu: UINavigationItem) {var toolbarButtons: [UIBarButtonItem] = toolbar.rightBarButtonItems! toolbarButtons.removeAtIndex (toolbarButtons.indexOf (düğme)!) toolbar.setRightBarButtonItems (toolbarButtons, animated: true)} ve bu harika çalışıyor
Kingalione

3

Bunu yapmanın bir yolu kullanmaktır initWithCustomView:(UIView *)tahsis ederken malı UIBarButtonItem. İçin alt sınıfı UIViewgizleme / gösterme özelliğine sahip olacaktır.

Örneğin:

1. Bir var UIButtonsen Hide / istediğiniz.

2. Make UIButtonözel bir görünüm olarak. Sevmek :

UIButton*myButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];//your button

UIBarButtonItem*yourBarButton=[[UIBarButtonItem alloc] initWithCustomView:myButton];

3.myButton Oluşturduğunuz gizleme / gösterme .[myButton setHidden:YES];


Ancak, diğer düğmeler arasındaki boşluğu kapatmaz: "Gizli" olduğunda araç çubuğunda boş bir alan olur.
lnafziger

@lnafziger Evet bu doğru, ama düğmeler arasındaki boşluğu kapatma hakkında OP söz okumadım, ama yine de not etmek için iyi bir nokta.
iNoob

1
Teşekkürler, cevabınız da faydalıdır, ancak çoğu insanın bir araç çubuğundaki bir düğmeyi gizlemek istediklerinde, boş alan olmadan orada görünmemesini istediğini düşünüyorum. Sol ya da sağ olan olsaydı gerçekten önemli olmazdı.
lnafziger

İyi makas, iNoob ve Inafziger - Her iki şekilde de bahsetmedim ama evet, boş bir yer olmamasını tercih ederim.
Sasha

3

Swift sürümü için kod şöyledir:

Şunun için UINavigationBar:

self.navigationItem.rightBarButtonItem = nil

self.navigationItem.leftBarButtonItem = nil

2

Çubuk düğme öğesi devre dışı bırakıldığında metin renginin açık bir renge ayarlanması muhtemelen daha temiz bir seçenektir. Bir yorumda açıklamanız gereken tuhaflık yoktur. Ayrıca düğmeyi yok etmezsiniz, böylece ilişkili film şeridi sekmelerini hala saklarsınız.

[self.navigationItem.rightBarButtonItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor clearColor]}
                                                      forState:UIControlStateDisabled];

Ardından, çubuk düğmesi öğesinin gizlenmesini istediğinizde şunları yapabilirsiniz:

self.navigationItem.rightBarButton.enabled = NO;

Gizli bir mülk yok ama bu aynı sonucu sunuyor.


1
RightBarButtonItem içinde bir düğme vardı. Bu yüzden etkin ayarını NO olarak ayarladım ve devre dışı durumdaki görüntüsünü nil olarak değiştirdim. Bir cazibe gibi çalıştı ... Teşekkürler
Skywalker

mükemmel bir fikir, ancak görüntüyü boş olarak ayarlamak benim için işe yaramadı, görüntü olarak 20x20 küçük bir şeffaf kare koymak zorunda
Lena Bru

2

UIBarButtonItem öğesinin içindeki metin yerine bir görüntüye sahip olması durumunda bunu gizlemek için yapabilirsiniz: navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;


2

Her birinde birden fazla araç çubuğu ve çoklu düğme olduğu için lnafzzig'in kabul edilen cevabına dayanarak paylaşacağımı düşündüğüm bazı yardımcı yöntemler:

-(void) hideToolbarItem:(UIBarButtonItem*) button inToolbar:(UIToolbar*) toolbar{
    NSMutableArray *toolbarButtons = [toolbar.items mutableCopy];
    [toolbarButtons removeObject:button];
    [toolbar setItems:toolbarButtons animated:NO];
}

-(void) showToolbarItem:(UIBarButtonItem*) button inToolbar:(UIToolbar*) toolbar atIndex:(int) index{
    NSMutableArray *toolbarButtons = [toolbar.items mutableCopy];
    if (![toolbarButtons containsObject:button]){
        [toolbarButtons insertObject:button atIndex:index];
        [self setToolbarItems:toolbarButtons animated:YES];
    }
}

2

Görünümü kolayca alabilir ve bu şekilde gizleyebilirsiniz

let view: UIView = barButtonItem.valueForKey("view") as! UIView
view.hidden = true

2

Swift 3 kullanıyorsanız

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

2

İşte bununla başa çıkacak bir uzantı.

extension UIBarButtonItem {

    var isHidden: Bool {
        get {
            return tintColor == .clear
        }
        set {
            tintColor = newValue ? .clear : .white //or whatever color you want
            isEnabled = !newValue
            isAccessibilityElement = !newValue
        }
    }

}

KULLANIM:

myBarButtonItem.isHidden = true

1

Eli Burke`ün yanıtını tamamlayan, UIBarButtonItembaşlık yerine arka plan resminiz varsa, kodu kullanabilirsiniz:

-(void)toggleLogoutButton:(bool)show{
    if (show) {
        self.tabButton.style = UIBarButtonItemStyleBordered;
        self.tabButton.enabled = true;
        UIImage* imageMap = [UIImage imageNamed:@"btn_img.png"];
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:imageMap forState:UIControlStateNormal];
    } else {
        self.tabButton.style = UIBarButtonItemStylePlain;
        self.tabButton.enabled = false;
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:nil forState:UIControlStateNormal];
    }
}

0

Toolbar.items dizisini değiştirmeniz gerekir.

Bitti düğmesini gizlemek ve görüntülemek için kullandığım bazı kodlar. Düğmeniz araç çubuğunun en uç noktasında veya diğer düğmeler arasındaysa, diğer düğmeleriniz hareket edecektir, bu nedenle düğmenizin kaybolmasını istiyorsanız düğmenizi ortaya doğru son düğme olarak yerleştirin. Düğme hareket efekti için animasyon, oldukça hoşuma gitti.

-(void)initLibraryToolbar {

    libraryToolbarDocumentManagementEnabled = [NSMutableArray   arrayWithCapacity:self.libraryToolbar.items.count];
    libraryToolbarDocumentManagementDisabled = [NSMutableArray arrayWithCapacity:self.libraryToolbar.items.count];
    [libraryToolbarDocumentManagementEnabled addObjectsFromArray:self.libraryToolbar.items];
    [libraryToolbarDocumentManagementDisabled addObjectsFromArray:self.libraryToolbar.items];
    trashCan = [libraryToolbarDocumentManagementDisabled objectAtIndex:3];
    mail = [libraryToolbarDocumentManagementDisabled objectAtIndex:5];
    [libraryToolbarDocumentManagementDisabled removeObjectAtIndex:1];
    trashCan.enabled = NO;
    mail.enabled = NO;
    [self.libraryToolbar setItems:libraryToolbarDocumentManagementDisabled animated:NO];

}

şimdi düğmenizi göstermek için aşağıdaki kodu kullanabilirsiniz

[self.libraryToolbar setItems:libraryToolbarDocumentManagementEnabled animated:YES];
trashCan.enabled = YES;
mail.enabled = YES; 

veya düğmenizi gizlemek için

[self.libraryToolbar setItems:libraryToolbarDocumentManagementDisabled animated:YES];
trashCan.enabled = NO;
mail.enabled = NO;

0

IB'de düğmenin başlığını boş bırakırsanız görünmez (hiç başlatılmadı mı?). Bunu bir yapı için silmeden ve tüm çıkış referanslarını çöpe atmadan geçici olarak bir bar düğmesi öğesinin kaybolmasını istiyorsanız, kullanıcı arayüzü güncellemeleri sırasında bunu sık sık yaparım.

Bu, çalışma sırasında aynı etkiye sahip değildir, düğmenin başlığını nil olarak ayarlamak, tüm düğmenin kaybolmasına neden olmaz. Üzgünüz sorunuzu gerçekten cevaplamıyor, ancak bazıları için yararlı olabilir.

Düzenle: Bu hile yalnızca düğmenin stili düz olarak ayarlanmışsa çalışır


0

Çözümümü buraya ekleyeceğim, çünkü henüz burada bahsetmediğim. Resmi bir kontrolün durumuna bağlı dinamik bir düğmeye sahibim. Benim için en basit çözüm, görüntüyü nilkontrol mevcut değilse ayarlamaktı . Kontrol her güncellendiğinde görüntü güncellendi ve bu benim için en iyisiydi. Ben de ayarlamak için emin olmak enablediçinNO .

Genişliği minimum bir değere ayarlamak iOS 7'de çalışmadı.


0

@Lnafziger, @MindSpiker, @vishal, et. ve arkadaşları,

Tek bir sağ (veya sol) çubuk düğmesi için geldiğim en basit bir astar:

self.navigationItem.rightBarButtonItem = <#StateExpression#>
    ? <#StrongPropertyButton#> : nil;

De olduğu gibi:

@interface MyClass()

@property (strong, nonatomic) IBOutlet UIBarButtonItem *<#StrongPropertyButton#>;

@end

@implementation

- (void) updateState
{
    self.navigationItem.rightBarButtonItem = <#StateExpression#>
        ? <#StrongPropertyButton#> : nil;
}

@end

Bunu test ettim ve benim için çalışıyor (güçlü çubuk düğmesi öğesi IB ile kablolu).


Bu, yalnızca bir düğmeniz varsa çalışır, ancak birden fazla düğmeniz varsa, cevabımın satırlarında bir yöntem kullanmanız gerekir.
lnafziger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.