2009-04-02 26 views
7

मेरे पास UIViewController है जो UINavigationController पर धक्का दिया गया है और वर्तमान में प्रदर्शित किया गया है। जब मैं व्यू कंट्रोलर के अंदर कुछ एसिंक्रोनस कार्य शुरू करने के लिए जाता हूं, तो मैं hidesBackButton को self.navigationItem पर YES पर सेट कर सकता हूं, और बैक बटन सही तरीके से छिपा हुआ है।self.navigationItem.hidesBackButton क्यों काम नहीं कर रहा है?

जैसे ही कार्य समाप्त हो गया है, और मैं hidesBackButton वापस करने के लिए नहीं सेट (यूआई धागे पर, मैं, तो हो सकता है कि मैं इस के बारे में सुनिश्चित कर दिया है), कुछ नहीं होता। बैक बटन छुपा रहता है।

क्या किसी ने इसे पहले देखा है? मुझे विशेष रूप से पागल ड्राइव क्या है कि मेरे आवेदन (एक ही आवेदन) में, एक अलग UINavigationController पदानुक्रम में, सटीक वही कोड सही तरीके से काम करता है!

उत्तर

4

क्या आप छिपा रहे हैं बैकबटन = नहीं थ्रेड से? सभी यूआई संचालन मुख्य धागे पर किया जाना चाहिए, अन्यथा उनके पास कोई प्रभाव नहीं पड़ेगा।

+0

performSelectorOnMainThread का उपयोग UI थ्रेड पर कार्यों को शंट करने के लिए किया जाता है, सही? –

+0

हां। वह सही है। [स्वयं प्रदर्शन चयनकर्ताऑनमेन थ्रेड: ...] – lostInTransit

+0

यह था! धन्यवाद! –

1

क्या आपने setNeedsDisplay को कॉल करके रीफ्रेश करने के लिए दृश्य को मजबूर करने का प्रयास किया है? शायद ओएस तुरंत परिवर्तन नहीं उठा रहा है और आपको इसे मजबूर करने की आवश्यकता है।

+0

हम्म, मुझे इसके बारे में पता नहीं था, मैं इसे आज़मा दूंगा। –

1

क्या आपने setHidesBack बटन का उपयोग करने का प्रयास किया है: एनिमेटेड: विधि इसके बजाय? शायद इसका थोड़ा अलग व्यवहार है।

+0

मैं इसे आज़मा दूंगा, लेकिन यह मुझे चिंतित करता है कि मैं अपने UINavigationControllers में से एक में कुछ गलत कर रहा हूं, क्योंकि यह अन्य UINavigationController में काम करता है। SetHidesBackButton के एक अलग संस्करण के लिए रिज़ॉर्ट बस बैंड-एड्स की तरह लगता है। –

2

मैं अपनी मशीन पर अपनी समस्या को दोहराने में सक्षम नहीं हूं। हालांकि, जब मैं मुख्य धागे पर अपना यूई अपडेट कर रहा था तब भी मुझे टेबलव्यू के साथ एक ही समस्या का सामना करना पड़ा। लेकिन setNeedsDisplay को कॉल करना उस समस्या को ठीक करता है।

आप इस प्रयास कर सकते हैं और देखो अगर यह काम करता है:

[self.navigationController.navigationBar setNeedsDisplay]; 

मुझे लगता है कि यह काम करना चाहिए, आप भी ऐसा ही करने की जरूरत है, लेकिन NAVIGATIONBAR पर बजाय। अगर यह काम करता है तो कृपया मुझे बताएं - क्योंकि मैं अपने समाधान का परीक्षण नहीं कर सकता क्योंकि मुझे कभी भी यह समस्या नहीं मिलती है :-)

+0

हम्मम्मम्मम्म, दिलचस्प - मैं इसे आज़मा दूंगा। यह अभी भी मुझे परेशान करता है कि यह मेरे अन्य UINavigationControllers में से एक में काम करता है, हालांकि, और एक अलग UINavigationController में काम नहीं करता है। किसी को फिर से चलाने की आवश्यकता क्यों होगी, जबकि दूसरा नहीं? : -/ –

+0

हाहा - अच्छा प्रश्न दोस्त - मुझे अभी भी पता चला है कि मेरा टेबलव्यू मेरे पहले दृश्य पर अपडेट क्यों प्रदर्शित करता है और मेरे दूसरे दृश्य पर नहीं है ;-) मुझे यूआईएलर्टव्यू के साथ भी यही समस्या है !!! – Raj

+0

हाहा, हाँ, मैंने अजीब सामान भी देखा है, * श्वास *, एसडीके बेहतर हो रहा है, लेकिन यह मेरी राय में बराबर नहीं है। –

1

मेरे मामले में मुझे बस दृश्य को शीर्षक देना पड़ा, जैसा कि: self.navigationItem.title = @ "मेनू";

मारिनस

1

मुझे हाल ही में एक ही समस्या है। मैंने एसओ और अन्य मंचों में जो कुछ भी पाया वह सचमुच मैंने कोशिश की- कुछ भी काम नहीं किया।

मेरे मामले में एक साधारण रूट नियंत्रक के साथ एक सामान्य रूप से UINavigationController दिखाया गया था जो क्रमशः बटन ए या बी दबाए जाने पर नियंत्रक स्टैक के शीर्ष पर दो दृश्य नियंत्रकों (ए और बी) को धक्का देगा। नियंत्रक बी वह था जो बैक बटन दिखाना नहीं था। लेकिन फिर भी, कभी-कभी ऐसा होता है, कभी-कभी ऐसा नहीं होता है।

डिबगिंग के घंटों के बाद, मैंने इसे ट्रैक करने में कामयाब रहे। नियंत्रक ए UITableViewController था। प्रत्येक बार जब मैंने इस नियंत्रक में एक सेल चुना, तो प्रतिनिधि स्टैक से नियंत्रक ए पॉप करेगा। परंतु। मैंने UISearchDisplayController का भी उपयोग किया। उस खोज को पॉप आउट करते हुए, जब खोज नियंत्रक अभी भी नेविगेशन नियंत्रक में कुछ गड़बड़ कर रहा था, जिसने बाद में नियंत्रक बी में बैक बटन को छिपाना असंभव बना दिया (ठीक है, यह अंततः viewDidLoad और viewDidAppear: के बीच छिपा हुआ था लेकिन फिर यह हमेशा दिखाई देता था)।

तो समाधान (बल्कि वैकल्पिक हल) जहां नियंत्रक एक बर्खास्त कर दिया गया करने के लिए इस लाइन को जोड़ने था:

controllerA.searchDisplayController.active = NO; 

// ... 
// [self.navigationController popViewControllerAnimated:YES]; 

आशा इस कोई कुछ घंटों पुर्जों।

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