2012-06-25 16 views
5

के साथ अजीब व्यवहार मैं ऐप प्रतिनिधि में इन कथनों के माध्यम से विभाजित नियंत्रण की उपस्थिति स्थापित कर रहा हूं।UISegmentedControl और UIAppearance

[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_normal.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] 
     forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalNormal.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalSelected.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_SelectedNormal.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

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

enter image description here

समस्या है जब मैं (मैं चयनित सूचकांक की दुकान और viewDidLoad में सेट खंड फिर से चुनें करने के लिए), विभक्त गलत तरीके से किसी अज्ञात के लिए निर्धारित है को देखने के लिए फिर वापस दृश्य से बाहर जाना कारण।

enter image description here

अगर मैं नल पर एक-जेड तो रिलीज, यह अपने आप ठीक कर दे। यह बग केवल तब होता है जब दृश्य पहले लोड होता है और चयनित सेगमेंट या तो रिलीज़ या ए-जेड था। जब ऑर्डर चुना जाता है और दृश्य लोड होता है तो विभाजक हमेशा ठीक दिखता है।

छवि आकार: विभक्त 2px चौड़ा है (सभी 3 छवियां एक ही आकार हैं), पृष्ठभूमि 2 पीएक्स चौड़ी हैं।

किसी भी विचार या पॉइंटर्स की अत्यधिक सराहना की जाएगी, मैं पिछले 10 घंटों के लिए अपने बालों को खींचने के लिए कोई समाधान खोजने की कोशिश कर रहा हूं।

+0

'viewDidLoad' में 'UISegmentedControl' के चयनित इंडेक्स को सेट करने के बाद' UISegmentedControl' 'की' setNeedsDisplay' विधि 'पर कॉल करें। शायद यह समस्या को ठीक करेगा। –

+0

काम नहीं किया। हालांकि धन्यवाद! –

+0

मैं भी इस मुद्दे को देख रहा हूं। अरे :( – runmad

उत्तर

7

यह मुझे लगता है कि UISegmentedControl के साथ एक बग है। नियंत्रण समय को स्वयं खींचने की अनुमति देने के लिए, आप विलंब के बाद चयनित सेगमेंट को सेट करके इसके आसपास काम कर सकते हैं।

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

setPreferences कहाँ अद्यतन करता है अपने विभाजित नियंत्रण के मूल्य: तुम भी एक वास्तविक देरी, बस की तरह कुछ का उपयोग करने के जरूरत नहीं है।

+0

यह बहुत अच्छा काम करता है। लेकिन मुझे आश्चर्य है कि इसके पीछे वास्तविक कारण क्या हो सकता है? – thesummersign

+1

क्योंकि यह पहले रन लूप (सेगमेंटेड कंट्रोल के बाद किया जाएगा) पहले से खींचा गया है)! यह बग आईओएस 6 –

+0

में बग ज्ञात है और मैं इस काम की पुष्टि कर सकता हूं। बहुत धन्यवाद। – glasz