2010-02-26 12 views
15

के बाद छिपा हुआ है मेरे पास सेटअप UITableViewController है जो UINavigationController के अंदर घोंसला है। जब सेल का चयन किया जाता है, UITableView'sdidSelectRowAtIndexPath विधि ट्रिगर की जाती है, जो पैरेंट नेविगेशन नियंत्रक को एक नया दृश्य धक्का देती है। इस नए दृश्य में प्रवेश पर छिपी नेविगेशन बार होना चाहिए।UINavigationController के नेविगेशन को रखना UISearchDisplayController चयन

[[self navigationController] setNavigationBarHidden:YES animated:NO]; 

मैं नेविगेशन पट्टी को छिपाने के लिए didSelectRowAtIndexPath विधि में इस लाइन का उपयोग करें। यह ठीक काम करता है जब एक पंक्ति का चयन खोज नियंत्रक का उपयोग नहीं किया जाता है, लेकिन खोज परिणाम चुनते समय ओवरराइड किया जाता है। ऐसा लगता है कि UISearchDisplayController ने नेविगेशन को अनदेखा करने के अपने अधिकार में लिया है पंक्ति के चयन के कुछ समय बाद।

यदि मैं setNavigationBarHidden को लक्ष्य दृश्य की viewWillAppear विधि में कॉल करता हूं, तो परिणाम समान होते हैं। मैं इसे viewDidAppear में छुपा कॉल रखकर काम कर सकता हूं, लेकिन यह बहुत अजीब संक्रमण प्रभाव बनाता है जो अजीब और जगह से बाहर महसूस करता है। मैं नेविगेशनबार को स्क्रीन पर नए दृश्य स्लाइड से पहले ही छुपाया है।

क्या किसी को पता है कि नेविगेशनबार का अनदेखा कहां हो रहा है, और/या किसी भी तरह से मैं इस व्यवहार को ओवरराइड कर सकता हूं?

+0

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

+0

विच हैक का उपयोग करके आप समाप्त हो गए? – Sorig

उत्तर

1

एक ही समस्या से टकरा गई, हो यह इस बदसूरत हैक साथ सुचारू रूप से काम कर रहा करने में कामयाब रहे:

- (void) viewWillDisappear: (BOOL) animated 
{ 
    if (searchController_.active)  
    { 
     self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 
     self.navigationController.navigationBar.tintColor = nil;   
    } 

    [super viewWillDisappear: animated]; 
} 


- (void) viewWillAppear: (BOOL) animated 
{  
    if (searchController_.active)  
    { 
     self.navigationController.navigationBar.barStyle = UIBarStyleDefault; 
    } 

    [super viewWillAppear: animated]; 
} 
6

यह सबसे सुरुचिपूर्ण समाधान नहीं हो सकता है, लेकिन मेरा मानना ​​है कि यह वास्तव में क्या करता है कि आप इसे करना चाहते हैं । मैं एक समान समस्या में आया, और मेरा समाधान एक तरीका था जो नेविगेशन बार को छुपाता है, जिसे 0 सेकंड की देरी के बाद कहा जाता है।

विधि है कि कहा जाता है:

[self performSelector:@selector(hideNavBar) withObject:nil afterDelay:0.0]; 

यह काम करता है और एक तात्कालिक बार में नेविगेशन पट्टी निकालता है:

-(void) hideNavBar { 
    if (self.navigationController.navigationBar.hidden == NO) 
    { 
     [self.navigationController setNavigationBarHidden:YES animated:YES]; 
    } 
} 

फिर viewDidLoad विधि में, मैं निम्नलिखित है। यदि आप एनीमेशन चाहते हैं या विलंब के बाद इसे हटाने के लिए आप देरी का समय संशोधित कर सकते हैं। मैंने कोशिश की [स्वयं छुपाएं Navarar] लेकिन यह बस काम नहीं किया, तो मैं ऊपर क्या है चिपके हुए।

उम्मीद है कि इससे मदद मिलती है, और अगर किसी के पास अधिक सुरुचिपूर्ण समाधान है, तो मुझे रूचि है!

+0

अरे यह मुझे एक घंटे के बेहतर हिस्से के लिए मिला। धन्यवाद! बस क्लियरिफ़ाई करने के लिए, आपको इसे दृश्य नियंत्रक में रखना होगा जिसे नेविगेशन स्टैक पर धकेल दिया जा रहा है। – Ben

+0

उपर्युक्त उत्तर आईओएस 7 पर काम नहीं करेगा –

0

मैं एक ही समस्या थी: मेरे विचार डिफ़ॉल्ट रूप से छुपा नेविगेशन पट्टी जिस तरह से यह छिपा रखने के लिए है और यहाँ है:

-(void) viewWillLayoutSubviews{ 
    if (self.navigationController.navigationBar.hidden == NO) 
    { 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
    } 
} 

इस तरह नेविगेशन पट्टी के बाद भी खोज पट्टी है प्रकट नहीं होता है इस्तेमाल किया गया।

-1
- (void) viewWillDisappear: (BOOL) animated 
{ 
    // self.searchOn property tell if full screen search is enabled 
    //if (self.searchOn) 
    //{ 

     [self.navigationController setNavigationBarHidden:NO animated:NO]; 
    //} 

    [super viewWillDisappear: animated]; 
} 


- (void) viewWillAppear: (BOOL) animated 
{ 
    //if (self.searchOn) 
    //{ 
     [self.navigationController setNavigationBarHidden:YES animated:YES]; 
    //} 

    [super viewWillAppear: animated]; 
} 
2

ठीक है, यह मुझे कुछ घंटों के लिए खराब कर दिया, लेकिन मुझे अंत में यह काम करने के लिए मिला! समस्या यह प्रतीत होती है कि UISearchDisplayController ने ट्रैक को खारिज कर दिए जाने के बाद नेविगेशन बार को छुपाया है या नहीं, और यदि यह है, तो इसे पुनर्स्थापित कर दिया गया है। यही कारण है कि जब आप नए दृश्य को धक्का देते हैं तो ऊपर के कई उत्तरों के साथ बार बार एनीमेशन के पूंछ के अंत को छिपाने लगते हैं। हालांकि, खोज प्रदर्शन नियंत्रक को धोखा देकर हम इस व्यवहार को बदल सकते हैं।

पहले: UISearchDisplayController

उपवर्ग कैसे छुपा से एक नेविगेशन नियंत्रक रखने के लिए पर जवाब के बाद, here पाया, मैं कोड बदल दिया, छिपा नेविगेशन पट्टी रखने के लिए:

- (void)setActive:(BOOL)visible animated:(BOOL)animated 
{ 
    if(self.active == visible) 
     return; 

    [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:YES]; 
    [super setActive:visible animated:animated]; 

    if (visible) 
     [self.searchBar becomeFirstResponder]; 
    else{ 
     [self.searchBar resignFirstResponder]; 
     [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:YES]; 
    } 
} 

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

दूसरा: नेविगेशन बार छुपाएं जब

बाहर निकल रहा है हम छुपाते हैं, तो ध्यान में रखते हुए नेविगेशन पट्टी गायब हो जाएगा, यह छिपा दिए जाएंगे:

-(void)viewWillDisappear:(BOOL)animated{ 
    [super viewWillDisappear:animated]; 

    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
} 

तीसरा: नेविगेशन बार छुपाएं जब रिटर्निंग

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

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    if(self.isFiltered){ 
     [self.navigationController setNavigationBarHidden:YES animated:NO]; 
    } 

} 

इस एक विशाल हैक की तरह लगता है, वहीं यह काम कर देता है और मैं इसे करने का कोई बेहतर तरीका देख सकता था।

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