2013-01-24 12 views
17

मेरे पास दो सेगमेंट (इंडेक्स: 0 और 1) के साथ एक UISegmentedControl है जिसे मैं प्रोग्रामेटिक रूप से 0 पर रीसेट करने का प्रयास कर रहा हूं। जब मैं नीचे दिया गया आदेश चलाता हूं तो यह सेगमेंट इंडेक्स को 0 पर रीसेट नहीं करता है अपेक्षित होना। इसके बजाय यह पर प्रकाश डाला गया खंड अनुक्रमित 1.UISegmentedControl चयनित इंडेक्स या मूल्य प्रोग्रामेटिक रूप से

[seg setSelectedSegmentIndex:0]; 

अजीब तरह जब मैं चयनित खंड प्रवेश करते है, यह रिटर्न 0

NSLog(@"seg setSelectedSegmentIndex %d", seg.selectedSegmentIndex); 

भी अजीब तरह से, मैं खंड 0 मैन्युअल स्पर्श से फिर से चुनें नहीं कर सकते setSelectedSegmentIndex:0 चलाने के बाद, यह खंड 1 के लिए बंद किया जा करने के लिए जब तक मैं 1 नल जिसमें यह रूप में सामान्य काम करता है लगता है।

itemArray = [NSMutableArray arrayWithObjects: @"Zero", @"One", nil]; 
    seg = [[UISegmentedControl alloc] initWithItems:itemArray]; 
    [seg setFrame:segRect]; 
    seg.segmentedControlStyle = UISegmentedControlStyleBar; 
    seg.momentary = NO; 
    [seg addTarget:self action:@selector(someAction:) forControlEvents: UIControlEventValueChanged]; 
    [mainView addSubview:seg]; 

नोट:: को फिर से करने के लिए क्या मैं इस सवाल के साथ पूरा करने के लिए कोशिश कर रहा था: मैं गतिशील रूप से एक चर के माध्यम से एक UISegmentedControl का चयन किया सूचकांक सेट करना चाहते हैं, मिल

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

+0

दोनों खंडों सक्षम हैं, इससे पहले कि आप का चयन करने के लिए प्रयास करें? (isEnabledForSegmentAtIndex का उपयोग कर) –

+0

@calvinBhai मुझे ऐसा लगता है, डिफ़ॉल्ट को सक्षम नहीं किया जाएगा? – Mrwolfy

+0

मेरे पास एक ही समस्या है, अन्य लोगों में से एक बार सेगमेंट 0 का चयन नहीं किया जा सकता है। मैं अभी के लिए एक खाली seg 0 होने के एक कामकाज के साथ रिलीज करने जा रहा हूँ। मेरा सेगमेंट UIScrollView के अंदर एक यूआईसींट्रोल के अंदर है। मुझे पहले समस्या आई थी जब आईओएस 5 ने ठीक काम किया था, लेकिन आईओएस 6 पर एक ही बाइनरी ने इस मुद्दे को प्रदर्शित किया। –

उत्तर

27

बदलें आप अपनी इच्छा के रूप में सूचकांक मूल्य का उपयोग बदल जाते हैं।

+0

हां। यही वह है जो मैं कर रहा हूँ। धन्यवाद। – Mrwolfy

1

कोड से, आप केवल seg.selectedSegmentIndex = someDefaultIndex कर सकते हैं।

चाहे आपको इसे viewDidLoad: में सेट करना चाहिए या नहीं, पूरी तरह से आपके आवेदन की संरचना पर निर्भर करता है। उदाहरण के लिए, यदि आपका ऐप पहली बार शुरू हो रहा है और दृश्य को लोड कर रहा है और ऐप के पिछले भाग के दौरान नियंत्रण को सेट करने की आवश्यकता है, तो यह निश्चित रूप से वहां ऐसा करने के लिए समझ में आता है।

viewDidLoad:

[seg setSelectedSegmentIndex:index]; 

में

1

यह विजुअल फीडबैक के संदर्भ में चयनित सेगमेंट को सॉर्ट करने में मदद करता है, जो प्रोग्रामिक रूप से चयनित सेगमेंट को सेट करने के बाद होता है, यह सेगमेंट को ठीक से टिंट करेगा।

for (int i=0; i<[seg.subviews count]; i++) 
{ 

    if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[seg.subviews objectAtIndex:i]isSelected]) 
    { 
     [[seg.subviews objectAtIndex:i] setTintColor:[UIColor grayColor]]; 
    } 
    if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[seg.subviews objectAtIndex:i] isSelected]) 
    { 
     [[seg.subviews objectAtIndex:i] setTintColor:[UIColor blackColor]]; 
    } 
} 
0

को फिर से करने के लिए क्या मैं इस सवाल के साथ पूरा करने के लिए कोशिश कर रहा था: मैं कुछ बनाने के लिए गतिशील रूप से एक चर के माध्यम से एक UISegmentedControl का चयन किया सूचकांक स्थापित करने के लिए, उचित दृश्य प्रतिक्रिया प्राप्त है, और एक विधि में चयनित सूचकांक जाँच, चाहते हैं चयनित सूचकांक के आधार पर होता है।

मूल रूप से मैंने अनुमान लगाया कि यह इतना आसान है: mySegmentedController.selectedSegmentIndex = someIndex, फिर अनुक्रमणिका के लिए परीक्षण करें। लेकिन जैसा कि मेरे प्रश्न में बताया गया है, यह मेरे लिए काम नहीं कर रहा था। व्यवहार अजीब है। उस कोड को चलाने के बाद उपयुक्त बटन हाइलाइट नहीं करेगा।

यहां एक प्रोजेक्ट है जहां मैंने इसे ठीक किया है, इसलिए यह काम करता है। यकीन नहीं है कि यह वास्तव में क्यों काम करता है। इंडेक्स सेट करने से पहले, संभवतया मैं वहां देरी कर सकता हूं। यदि मैं इसे परिशोधित कर सकता हूं तो मैं प्रोजेक्ट फ़ाइल को अपडेट और टिप्पणी करूंगा।

http://owolf.net/uploads/StackOverflow/SegmentedControllers.zip

0

चेतावनी: यह काफी सवाल का जवाब नहीं है, लेकिन निकट से संबंधित है।

मुझे एक समान समस्या थी। अधिकांश समय मेरे UISegmentedController ठीक काम किया। इसमें 4 सेगमेंट, ऑफ, 30, 60 और 120 हैं।

यादृच्छिक अंतराल पर (आमतौर पर रिलीज से पहले !!), ऑफ सेगमेंट उपयोगकर्ता इंटरफ़ेस से अन-चयन योग्य हो जाता है। (मैंने कोड से इसे चुनने की कोशिश नहीं की क्योंकि मुझे ऐसा करने की ज़रूरत नहीं है और मेरी समस्या का समाधान नहीं होगा।)

समाधान मेरे XIB से उस UISegmentedController को हटाने और इसे ताजा (और बिल्कुल समान) जो तब ठीक काम करता है।

मैं भी सीएमडी-सी और सीएमडी-ने किसी अन्य ऐप के XIB में अपमानजनक UISegmentedController को अपमानित किया। और ऑफ सेगमेंट (यानी इंडेक्स 0 पर एक) उस एक्सआईबी में भी चयन नहीं किया जा सकता था।

यह एक्सकोड के साथ एक मुद्दा प्रतीत होता है।

0

स्विफ्ट 3,0

segmentedControl.selectedSegmentIndex = #your value#