मैं UIBarButtonItem को कैसे दिखाऊँ / छिपाऊँ?


251

मैंने आईबी में कई बटन के साथ एक टूलबार बनाया। मैं मुख्य विंडो में डेटा की स्थिति के आधार पर एक बटन को छिपाने / दिखाने में सक्षम होना चाहता हूं।

UIBarButtonItem एक छिपी हुई संपत्ति नहीं है, और किसी भी उदाहरण को छिपाने के लिए मैंने उन्हें अब तक एनएवी बार बटन सेट करने के लिए शामिल किया है, जो मुझे नहीं लगता कि मैं यहां करना चाहता हूं क्योंकि मुझे फिर से बटन दिखाने की आवश्यकता हो सकती है (नहीं यह उल्लेख करने के लिए कि, यदि मैं अपने बटन को एक IBOutlet से जोड़ता हूं, अगर मैं इसे सेट करता हूं तो मुझे यकीन है कि मैं इसे वापस कैसे पाऊंगा)।


मैंने बस इसे अक्षम कर दिया और यह कहते हुए एक्सेसिबिलिटी लेबल जोड़ा कि बटन की सुविधा उपलब्ध नहीं है।
डैनियल स्प्रिंगर

जवाबों:


263

एक मजबूत आउटलेट में अपना बटन सहेजें (इसे कॉल करें myButton) और इसे जोड़ने / हटाने के लिए ऐसा करें:

// 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];
}

क्योंकि यह आउटलेट में संग्रहीत है, आप टूलबार पर नहीं होने पर भी इसका संदर्भ रखेंगे।


73
नेविगेशन कंट्रोलर में अपने दाहिने बटन के लिए यह काम करने के लिए मैंने टूलबार्इमेट्स और सेटटूलबर्इटीम्स के बजाय self.navigationItem.rightBarButtonItems और [self.navigationItem setRightBarButtonItems <prams>] का उपयोग किया।
माइंडस्पीकर

@ मिंडस्पीकर: हां, वह एक ही तकनीक एक नेविगेशन बार के बटनों के लिए भी काम करता है।
lnafziger

1
क्या मुझे डीलब्लॉक में myButton को शून्य करना है?
वैन ड्यू ट्रान

48
या Apple बस जोड़ा जा सकता है। -_-
११:

217

मुझे पता है कि इस सवाल का जवाब देर से मिलता है। हालांकि, अगर किसी और को भी इसी तरह की स्थिति का सामना करना पड़े तो यह मदद कर सकता है।

IOS 7 में, बार बटन आइटम को छिपाने के लिए, हम निम्नलिखित दो तकनीकों का उपयोग कर सकते हैं: -

  • उपयोग SetTitleTextAttributes: - यह "पूर्ण", "सहेजें" आदि जैसे बार बटन आइटम पर बहुत अच्छा काम करता है। हालांकि, यह ऐड, ट्रैश सिंबल आदि जैसी वस्तुओं पर काम नहीं करता है (क्योंकि मेरे लिए नहीं) वे ग्रंथ नहीं हैं।
  • उपयोग करें TintColor: - अगर मेरे पास "deleteButton" नामक एक बार बटन आइटम है: -

बटन को छिपाने के लिए, मैंने निम्नलिखित कोड का उपयोग किया: -

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

बटन को फिर से दिखाने के लिए मैंने निम्नलिखित कोड का उपयोग किया: -

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

[self.navigationItem.rightBarButtonItem setEnabled: NO]; [self.navigationItem.rightBarButtonItem setTintColor: [UIColor clearColor]];
लियोन

3
स्विफ्ट के लिए: deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()अक्षम करने और छिपाने के लिए, और deleteButton.enabled = true; deleteButton.tintColor = nilसामान्य रूप से फिर से सक्षम और दिखाने के लिए।
यूनिक्समॉकी जूल

1
मुझे यह पसंद है कि यह दृष्टिकोण मुझे उस वर्ग के अंदर UIBarButton प्रदर्शित करने या न करने के लिए तर्क देता है। यह केवल एक बटन के साथ काम करने का कारण तुरंत स्पष्ट नहीं है - ऐसा इसलिए है क्योंकि यदि आप इस तरह से एक बटन छिपाते हैं तो यह अभी भी जगह लेगा, इसलिए यदि आपके पास एक से अधिक बटन हैं, तो आपके पास खाली अंतराल हो सकता है।
सिंपलजी

आपका पहला दृष्टिकोण मेरे लिए एकदम सही था। मैं सेट UIColor.clearके लिए UIControlState.disabledऔर दिखा सकते हैं / के साथ बटन को छिपाने setEnabled। बेशक, जैसा कि आपने बताया, यह केवल टेक्स्ट बटन के लिए काम करता है।
fl034

यदि यह एक बड़ी छवि (शायद पहुंच के लिए) में पॉप अप होने तक उस पर लंबे समय तक प्रेस करता है, तब भी इसे अक्षम करने के लिए अक्षम सेट के साथ काम करता है।
डैनियल स्प्रिंगर

67

यहाँ एक सरल तरीका है:

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

मैंने अभी इसे अपने रेटिना iPad पर चलाया था, और .01 यह दिखाने के लिए पर्याप्त नहीं है।


13
सभी समाधानों में से, यह एक त्वरित, गंदा और प्रभावी था। मैंने भी barbuttItem.enabled = NO जोड़ा; चूँकि मैं अभी भी बटन दबा सकता हूँ अगर मैंने इसे बहुत मारा।
स्टिकले

1
मेरे लिए काम नहीं करता है। मुझे लगा कि ऐसा इसलिए है क्योंकि मैं '+' छवि के साथ एक ऐड बटन का उपयोग कर रहा था, लेकिन मैंने इसके बजाय "न्यू" टेक्स्ट के साथ एक कस्टम बटन की कोशिश की और यह अभी भी गायब नहीं हुआ है। सक्षमता बदल जाती है इसलिए मुझे पता है कि मेरा कोड निष्पादित किया जा रहा है। कोई विचार? ध्यान दें कि यह बटन एक स्टोरीबोर्ड में बनाया गया है और इसमें एक सेग है, इसलिए मैं इसके बजाय एक प्रोग्रामेटिक बटन में बदलना नहीं चाहता हूं
Rhubarb

19
यह नेविगेशन कंट्रोलर टूलबार में काम नहीं करता है, लेकिन यह अन्य टूलबार के लिए करता है।
ड्रू रोसेनबर्ग

3
यह इसे छुपाता है लेकिन यह अभी भी नल का जवाब देता है। मेरे लिए यह एक अदृश्य बटन की तरह काम करता है।
टिबिडाबो

यदि आपने इस पंक्ति का प्रयोग करके इसे वैश्विक रंग प्रदान किया है self.window?.tintColor = APP_PRIMARY_COLOR, तो यह काम नहीं करेगा
मेहुल ठक्कर

60

इसकी चौड़ाई को बदलने या बार से हटाने के बिना एक बटन को छिपाना संभव है। यदि आप शैली को सादे पर सेट करते हैं, तो शीर्षक को हटा दें, और बटन को अक्षम करें, यह गायब हो जाएगा। इसे पुनर्स्थापित करने के लिए, बस अपने परिवर्तनों को उल्टा करें।

-(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
यह मेरे लिए बस btn.title = nil को सेट करके काम करता है। मैं सक्षम भी स्थापित कर रहा हूँ = NO, बस के मामले में ...
पोर्क 'एन' बनी

3
IOS7 में मेरे लिए काम नहीं करने के लिए बटन itIt.title सेट करना। इसे वापस सेट करते समय बटन फिर से दिखाई नहीं देता है। हालाँकि, जो काम करता था वह बटन सेट कर रहा था। Item.title = @ "";
निशान नोपर

42

नीचे मेरा समाधान है, हालांकि मैं इसे नेविगेशन बार के लिए देख रहा था।

navBar.topItem.rightBarButtonItem = nil;

यहाँ "navBar" XIB के दृश्य में नेविगेशनबार के लिए एक IBOutlet है। यहाँ मैं बटन को छुपाना चाहता था या किसी शर्त के आधार पर दिखाना चाहता था। तो "अगर" में स्थिति के लिए im परीक्षण और यदि सही है, तो मैं लक्ष्य दृश्य के देखने की विधि में बटन को शून्य पर सेट कर रहा हूं।

यह आपकी समस्या के लिए प्रासंगिक नहीं हो सकता है, लेकिन अगर आप नेविगेशनबेर पर बटन छिपाना चाहते हैं तो ऐसा ही कुछ हो सकता है


यदि आप बाद में rightBarButtonItemफिर से सेट करना चाहते हैं , तो सुनिश्चित करें कि बटन आइटम को एक मजबूत IBOutlet में संग्रहीत किया गया है ताकि जब आप इसे नेविगेशन बार से हटा दें तो यह रिलीज़ न हो।
नैट

30

स्विफ्ट 3 और स्विफ्ट 4 के लिए आप इसे छिपाने के लिए कर सकते हैं UIBarButtomItem:

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

और दिखाने के लिए UIBarButtonItem:

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

tintColorआपको उस मूल रंग को निर्दिष्ट करना होगा जिसे आप उपयोग कर रहे हैंUIBarButtomItem


2
लेकिन यह अभी भी इस बटन के लिए जगह लेगा।
मकाले

22

मैं वर्तमान में OS X Yosemite डेवलपर पूर्वावलोकन 7 और Xcode 6 बीटा 6 को iOS 7.1 पर लक्षित कर रहा हूं और निम्नलिखित समाधान मेरे लिए ठीक काम कर रहा है:

  • के लिए आउटलेट बनाएं UINavigationItemऔर UIBarButtonItemरों
  • हटाने के लिए निम्न कोड चलाएँ

    [self.navItem setRightBarButtonItem:nil];
    [self.navItem setLeftBarButtonItem:nil];
  • फिर से बटन जोड़ने के लिए निम्नलिखित कोड चलाएं

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

धन्यवाद, यह सबसे अच्छी विधि है जिसे मैंने पाया है। बस यह सुनिश्चित कर लें कि आपके बटन के लिए आपके संदर्भ मजबूत हैं।
ज्योंग २ j

इसके अलावा, ध्यान रखें कि यह तभी काम करता है जब आपके पास सिर्फ एक बटन हो। उदाहरण उस तरफ के सभी बटन को हटा देगा।
lnafziger

@jyoung यह मेरे लिए काम करता है, लेकिन अगर संदर्भ मजबूत है तो यह क्यों मायने रखता है? मैंने दूसरे तरीके की कोशिश नहीं की, लेकिन आमतौर पर इसे इस तरह से सेट नहीं किया जाता क्योंकि यह डिफ़ॉल्ट नहीं है।
रॉबर्ट

@Robert आप बाद के समय में ऑब्जेक्ट का उपयोग करना चाहते हैं, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि जब आप इसे शून्य पर सेट करते हैं तो ऑब्जेक्ट कचरा एकत्र नहीं करता है। यदि आप बार बटन आइटम को इससे छुटकारा पाने के लिए ठीक है, तो ऑब्जेक्ट को बनाए रखने के अलावा और कुछ भी नहीं था, यह संदर्भ संख्या 0 होगी और यह कचरा एकत्र किया जाएगा।
jyoung

14

मैंने अपने प्रोजेक्ट में IBOutlets का उपयोग किया। तो मेरा समाधान था:

@IBOutlet weak var addBarButton: UIBarButtonItem!

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

और जब आपको इस बार को फिर से दिखाना होगा, तो बस उलटे गुण सेट करें।

में स्विफ्ट 3 के बजाय enableका उपयोग isEnableसंपत्ति।



12

कस्टम छवि के साथ iOS 8. UIBarButtonItem। कई अलग-अलग तरीकों की कोशिश की, उनमें से ज्यादातर मदद नहीं कर रहे थे। मैक्स का समाधान, setTintColorकिसी भी रंग में नहीं बदल रहा था। मैंने खुद ही यह पता लगा लिया, सोचा कि यह किसी एक के काम आएगा।

छिपाने के लिए:

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

दिखाने के लिए:

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

9

स्विफ्ट में कोशिश करें, tintColorअगर आपके UIBarButtonItem के लिए कुछ डिज़ाइन नहीं है, तो AppDelegate में फ़ॉन्ट आकार की तरह अपडेट करें , यह दिखाते समय आपके बटन की उपस्थिति को पूरी तरह से बदल देगा।

टेक्स्ट बटन के मामले में, शीर्षक बदलने से आपका बटन गायब हो सकता है।

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

7

मैं में एक और शिकन की खोज की tintColorऔर isEnabledमैक्स और दूसरों के द्वारा सुझाव दिया दृष्टिकोण - जब-योग्यता पहुँच के लिए सक्षम है और बटन है तार्किक राज्य है कि यह "मंद हो" है (छुपा, पहुंच कर्सर अभी भी बार बटन पर ध्यान दिया जाएगा, और यानी क्योंकि isEnabledहै झूठा सेट)। स्वीकृत उत्तर में दृष्टिकोण इस साइड-इफेक्ट से ग्रस्त नहीं है, लेकिन मैंने पाया कि एक और काम isAccessibilityElement"बटन छिपाते समय" झूठा करना था :

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

और फिर isAccessibilityElementबटन को "दिखा" करने पर सही पर वापस सेट करना:

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

बार बटन आइटम होने के बाद भी स्पेस लेना मेरे मामले में कोई समस्या नहीं थी, क्योंकि हम लेफ्ट-राइट राइट बटन आइटमों को छिपा रहे थे / दिखा रहे थे।



5

@Lnafziger उत्तर से सुधार

एक मजबूत आउटलेट में अपने बर्बुटोन को बचाएं और इसे छिपाने / दिखाने के लिए ऐसा करें:

-(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];
    }
}

जब कभी फंक्शन के नीचे उपयोग की आवश्यकता हो ..

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

5

बस सेट करें barButton.customView = UIView()और चाल देखें


यह उत्तर क्या करता है, सभी लचीले आकार को काम करने की अनुमति देता है। यह वास्तव में एक सुपर कुशल जवाब है। शायद एक विस्तार के साथ युग्मित यह सही होगा।
एड्रियन_एच

4

एक UIBarButtonItem को "छिपाने" का कोई तरीका नहीं है आपको इसे सुपरव्यू से निकालना होगा और जब आप इसे फिर से प्रदर्शित करना चाहते हैं तो इसे वापस जोड़ना होगा।


यह वास्तव में सच नहीं है - मैक्स द्वारा वर्णित विधि अच्छी तरह से काम करती है।
उत्तरी

1
nothernman - Max वास्तव में सही नहीं है। वह वास्तव में उस बटन को नहीं छिपा रहा है जिस तरह से ज्यादातर लोग "छिपने" को परिभाषित करेंगे। वह बस इसे दिखाई नहीं दे रहा है और उपयोगकर्ता सहभागिता को अक्षम कर रहा है। बटन अभी भी है और जगह लेता है। यह नीचे आता है कि आप "छिपाने" को कैसे परिभाषित करना चाहते हैं, मेरा मानना ​​है कि मूल प्रश्न की भावना वास्तव में इसे हटाना / जोड़ना चाहती थी, न कि इसे केवल अदृश्य बनाना।
माइकल पीटरसन 19

4

यह उत्तर सूची का लंबा रास्ता है, लेकिन बस किसी मामले में एक आसान कॉपी और स्विफ्ट समाधान के लिए पेस्ट करना चाहता है, यहां यह है

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);
    }
}

बुरा नहीं है, लेकिन आपको एक UINavigationItem को पैरामीटर के रूप में देना होगा न कि UIToolbar को क्योंकि वह UIBarButtonItem को छिपाने के लिए कहता है। मैंने आपके फ़ंक्शन को इसमें संशोधित किया: func hideToolbarItem (बटन: UIBarButtonItem, withToolbar टूलबार: UINavigationItem) {var टूलबारबटन: [UIBarButtonemem] = toolbar.rightBarButtonItems! toolbarButtons.removeAtIndex (toolbarButtons.indexOf (बटन)!) toolbar.setRightBarButtonItems (toolbarButtons, एनिमेटेड: true)} और उस महान
Kingalione

3

इसे करने का एक तरीका यह है initWithCustomView:(UIView *)कि आवंटित करते समय संपत्ति का उपयोग करें UIBarButtonItem। के लिए उपवर्ग UIViewमें छिपाने / अनहाइड करने की संपत्ति होगी।

उदाहरण के लिए:

1. एक है UIButtonजो आप छिपाने / छिपाना निरस्त करना चाहते हैं।

2.UIButton कस्टम दृश्य के रूप में। पसंद :

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

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

3. आप myButtonअपने द्वारा बनाए गए को छुपा / अनहाइड कर सकते हैं ।[myButton setHidden:YES];


हालांकि, यह अन्य बटनों के बीच के अंतर को बंद नहीं करेगा: जब यह "छिपा हुआ" होगा तो टूलबार पर एक खाली क्षेत्र होगा।
lnafziger

@lnafziger हाँ यह सच है, लेकिन मैंने ओपी का उल्लेख बटनों के बीच की खाई को बंद करने के बारे में नहीं पढ़ा, लेकिन यह ध्यान देने योग्य बात है।
आईबॉय

1
धन्यवाद, आपका उत्तर भी उपयोगी है, लेकिन मुझे लगता है कि ज्यादातर लोग जब एक टूलबार पर एक बटन छिपाना चाहते हैं, तो यह देखना चाहते हैं कि यह बिल्कुल नहीं है (खाली क्षेत्र के बिना)। यदि यह बाएँ या दाएँ एक है, तो यह वास्तव में बात नहीं करेगा।
lnafziger

अच्छे बिंदु, iNoob और Inafziger - मैंने इसे किसी भी तरह से उल्लेख नहीं किया है लेकिन हां, मैं पसंद करूंगा कि कोई रिक्त स्थान न हो।
साशा

3

स्विफ्ट संस्करण के लिए, यहाँ कोड है:

के लिए UINavigationBar:

self.navigationItem.rightBarButtonItem = nil

self.navigationItem.leftBarButtonItem = nil

2

बार बटन आइटम अक्षम होने पर पाठ रंग को एक स्पष्ट रंग में सेट करना संभवतः एक क्लीनर विकल्प है। कोई अजीब बात नहीं है कि आपको एक टिप्पणी में समझाना पड़े। इसके अलावा, आप बटन को नष्ट नहीं करते हैं इसलिए आप अभी भी किसी भी जुड़े स्टोरीबोर्ड को सुरक्षित रखते हैं।

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

तब जब आप बार बटन आइटम को छिपाना चाहते हैं, तो आप बस कर सकते हैं:

self.navigationItem.rightBarButton.enabled = NO;

यह लंगड़ा है कोई छिपी हुई संपत्ति नहीं है, लेकिन यह एक ही परिणाम प्रदान करता है।


1
मेरे दाईं ओर एक बटन लगा था। इसलिए मैंने इसकी सक्षम संख्या NO पर सेट की और अक्षम राज्य पर इसकी छवि को nil में बदल दिया। एक आकर्षण की तरह काम किया ... धन्यवाद
स्काईवॉकर

उत्कृष्ट विचार है, लेकिन मेरे लिए काम नहीं करने के लिए छवि की स्थापना, मैं 20x20 की छवि के रूप में थोड़ा पारदर्शी वर्ग डाल दिया था
Lena Bru

2

यदि UIBarButtonItem में पाठ के बजाय एक छवि है, तो आप इसे छिपाने के लिए ऐसा कर सकते हैं: navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;


2

कुछ सहायक तरीके मैंने सोचा कि मैं lnafziger के स्वीकृत उत्तर के आधार पर साझा करूंगा क्योंकि मेरे पास प्रत्येक में कई टूलबार और कई बटन हैं:

-(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

आप आसानी से दृश्य प्राप्त कर सकते हैं और इसे इस तरह छिपा सकते हैं

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


2

यहां एक एक्सटेंशन है जो इसे संभाल लेगा।

extension UIBarButtonItem {

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

}

उपयोग:

myBarButtonItem.isHidden = true

1

एली बर्क की प्रतिक्रिया को लागू करते हुए, यदि आपकी UIBarButtonItemशीर्षक के बजाय पृष्ठभूमि छवि है, तो आप कोड का उपयोग कर सकते हैं:

-(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 सरणी में हेरफेर करने की आवश्यकता है।

यहाँ कुछ कोड है जिसका उपयोग मैं एक बटन को छिपाने और प्रदर्शित करने के लिए करता हूं। यदि आपका बटन टूलबार के अंतिम छोर पर है या अन्य बटनों के बीच में आपके अन्य बटन चलेंगे, इसलिए यदि आप चाहते हैं कि आपका बटन बस गायब हो जाए, तो अपने बटन को केंद्र के अंतिम बटन के रूप में रखें। मैं प्रभाव के लिए बटन चाल चेतन, मुझे यह काफी पसंद है।

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

}

तो अब अपना बटन दिखाने के लिए निम्न कोड का उपयोग कर सकते हैं

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

या अपने बटन को छिपाने के लिए

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

0

आईबी में यदि आप बटन का शीर्षक खाली छोड़ देते हैं तो यह प्रकट नहीं होगा (कभी भी आरंभिक नहीं?)। मैं यूआई अपडेट के दौरान अक्सर विकास के दौरान ऐसा करता हूं, अगर मैं चाहता हूं कि एक बार के लिए एक बटन बटन गायब हो जाए तो इसे हटाए बिना अपने सभी आउटलेट संदर्भों को मिटा दिया जाए।

रनटाइम के दौरान इसका समान प्रभाव नहीं होता है, बटन के शीर्षक को शून्य पर सेट करने से यह पूरा बटन गायब नहीं होगा। क्षमा करना वास्तव में आपके प्रश्न का उत्तर नहीं देता है, लेकिन कुछ के लिए उपयोगी हो सकता है।

संपादित करें: यह चाल केवल तभी काम करती है जब बटन की शैली सादे पर सेट हो


0

मैं अपना समाधान यहां जोड़ूंगा क्योंकि मैं अभी तक इसका उल्लेख नहीं कर पाया हूं। मेरे पास एक गतिशील बटन है जिसकी छवि एक नियंत्रण की स्थिति पर निर्भर करती है। मेरे लिए सबसे सरल समाधान छवि को सेट करना था nilयदि नियंत्रण मौजूद नहीं था। हर बार नियंत्रण अपडेट होने पर छवि को अपडेट किया गया और इस तरह, यह मेरे लिए इष्टतम था। बस मुझे यकीन है कि मैं भी करने के enabledलिए निर्धारित किया है NO

चौड़ाई को न्यूनतम मान पर सेट करना iOS 7 पर काम नहीं करता था।


0

क्रेडिट के साथ @lnafziger, @MindSpiker, @vishal, et। अल,

सबसे सरल एक लाइनर जो मैं एक दायें (या बाएं) बार बटन के लिए आया है:

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

जैसे की:

@interface MyClass()

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

@end

@implementation

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

@end

मैंने यह परीक्षण किया और यह मेरे लिए काम करता है (आईबी के माध्यम से वायर्ड बार बटन आइटम के साथ)।


यह काम करेगा यदि आपके पास केवल एक बटन है, लेकिन यदि आपके पास कई बटन हैं, तो आपको मेरे उत्तर की तर्ज पर एक विधि का उपयोग करना होगा।
lnafziger
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.