2011-10-27 24 views
5

आईओएस ऐप में, मैं कैसे निर्धारित कर सकता हूं कि बैक बटन प्रदर्शित होता है या नहीं? आदर्श रूप से, मैं इसे अपने नियंत्रक की loadView विधि में जानना चाहता हूं।मैं कैसे निर्धारित कर सकता हूं कि बैक बटन प्रदर्शित होता है या नहीं?

यहाँ है कि मैं क्या, loadView में की कोशिश की है viewDidLoad, और viewWillAppear:

if (self.navigationItem.backBarButtonItem)

और इस:

if (self.navigationItem.leftBarButtonItem)

उन काम की न तो - वे नहीं के बराबर हमेशा आपके पास रहता (अभिव्यक्ति झूठी मूल्यांकन करती है), स्क्रीन पर बैक बटन होने पर भी। आखिरकार मैं क्या करना चाहता हूं, self.navigationItem.leftBarButtonItem के रूप में एक रद्द करें बटन सेट करें, लेकिन केवल अगर कोई बैक बटन नहीं है। यदि कोई बैक बटन है, तो हमें रद्द करें बटन की आवश्यकता नहीं है। जैसा कि है, leftBarButtonItem सेट करना बैक बटन ओवरराइड कर रहा है, इसलिए हम हर बार एक रद्द बटन देख रहे हैं - यहां तक ​​कि जब बैक बटन होना चाहिए।

उत्तर

16

आप अपने backBarButtonItem के लिए गलत ऑब्जेक्ट पूछ रहे हैं। यह प्रॉपर्टी नियंत्रित करती है कि नेविगेशन स्टैक में "बैक" आइटम होने पर ऑब्जेक्ट का प्रतिनिधित्व कैसे किया जाता है।

इसलिए, आप नीचे स्तर पर दृश्य नियंत्रक पूछ जाने की जरूरत है, जिसमें आप नेविगेशन ढेर में हैं क्या इसके backBarButtonItem है:

int n = [self.navigationController.viewControllers count] - 2; 
if (n >= 0) 
    if ([(UIViewController*)[self.navigationController.viewControllers objectAtIndex:n]navigationItem].backBarButtonItem == nil) 
     // Do your thing.... 

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

0

loadView बहुत जल्दी है। सबसे पहले आप इसे देख सकते हैं viewDidLoad में है। आपको viewWillAppear के लिए प्रतीक्षा करनी पड़ सकती है।

+0

प्रतिक्रिया देने के लिए धन्यवाद। मैंने अभी प्रश्न में मेरे दोनों 'if' कथनों की कोशिश की है, विल्लएपियर, और मुझे एक ही परिणाम मिल रहा है - वे अभी भी हमेशा शून्य हैं और इसलिए मुझे यह नहीं बताते कि मैं क्या जानना चाहता हूं। –

+0

सुनिश्चित करें कि 'self.navigationItem' 'nil' नहीं है। नवीनतम जो यह लागू हो सकता है 'viewDidAppear' है। यदि आप इसे वहां नहीं देख रहे हैं, तो आपको सही वस्तु नहीं मिल रही है। –

+0

फिर से धन्यवाद। मैंने सत्यापित किया है कि 'self.navigationItem' शून्य नहीं है। मैंने इसे 'viewDidAppear' में परीक्षण किया और अभी भी वही परिणाम प्राप्त कर रहा हूं। –

3
NSLog(@"%@",self.navigationController.navigationBar.backItem); 
if (self.navigationController.navigationBar.backItem == NULL) { 
    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(addLaunch)]; 
    self.navigationItem.leftBarButtonItem = cancelButton; 
    [cancelButton release]; 
} 

इस कोड काम करता है, इसके viewDidAppear में, यदि आपका नियंत्रक रिक्त है, कोई बटन theres, तो मैं रद्द बटन, इसकी नहीं एक वापस आइटम जोड़ने हालांकि, सिर्फ एक नियमित रूप से:] उम्मीद है कि इस मदद करता है

निम्नलिखित

self.navigationController.navigationBar.backItem 
बजाय

backBarButtonItem के लिए

0

खोजें।

यदि backItem मौजूद है तो आप rootViewController से आगे नेविगेशन स्टैक पर हैं।

संबंधित मुद्दे

 संबंधित मुद्दे