2010-09-09 5 views
5

पर कस्टम छवियों के साथ UISegmentedControl मैं कुछ कस्टम छवियों के साथ एक UISegmentedControl उपयोग कर रहा हूँ:iPhone: दबाया राज्य

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:nil]; 
[segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"0.png"] atIndex:0 animated:NO]; 
[segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"1.png"] atIndex:1 animated:NO]; 
[segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"2.png"] atIndex:2 animated:NO]; 
segmentedControl.frame = CGRectMake(0, 0, 90, 30); 
[self.view addSubview:segmentedControl]; 
[segmentedControl release]; 

यह हिस्सा ठीक काम करता है। लेकिन, यह अभी भी नियंत्रण के लिए ऐप्पल की स्टाइल का उपयोग करता है और बस मेरी छवियों को जोड़ता है। क्या कोई तरीका है कि मुझे ऐप्पल की शैलियों का उपयोग करने की ज़रूरत नहीं है, और बिना किसी पृष्ठभूमि के अपनी छवियों के साथ कंसोल को कस्टमाइज़ करें? मैं अपनी खुद की "चयनित" राज्य छवियों को भी पसंद करूंगा।

संभव है?

उत्तर

3

Nic,

थोड़ी देर के लिए इस के साथ खेलने के बाद, मैं बस "मेरे अपने रोल करने के लिए" एक तरह से फैसला किया।

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

मुझे अन्य समाधान सुनना अच्छा लगेगा।

0

डेक्सटरडब्ल्यू के उत्तर के अतिरिक्त। मैं उसी निर्णय में आया था - नकल करने के लिए केवल UIButtons का उपयोग कर।
हालांकि UISegmentControl नकल करने के लिए यह एक आसान काम नहीं है। मैंने UIButton की स्थिति का उपयोग करने की कोशिश की लेकिन UIButtonHightlighted और Selected राज्यों के लिए समान सेटिंग्स (बीजी छवि, फ़ॉन्ट रंग) सेट करने के लिए अपेक्षित काम नहीं करेगा। ऐसे मामले में जब सेगमेंट को अभी भी "दबाए जाने योग्य" दृश्यमान चुना जाता है। इसलिए, इससे बचने के लिए और बटन को UISegmentedControl जैसे अभिनय सेट करने के लिए मैंने selected स्थिति का उपयोग नहीं किया। इसके बजाय आईडी ने कोड में चयनित बटन की उपस्थिति बदलने का फैसला किया ताकि normal और highlighted राज्य चयनित बटन के लिए समान रूप से समान हैं और अचयनित के लिए अलग हैं।
मान लीजिए कि मेरे पास 3 बटन सेगमेंट हैं कंट्रोल (वाम एसजीएम | मिडिल एसजीएम | राइटएसजीएम) और सामान्य स्थिति के लिए मैं "सेगमेंट_डेफॉल्ट" नामक बीजी तस्वीर का उपयोग कर रहा हूं और फ़ॉन्ट रंग सफेद और चयनित राज्य के लिए इसकी बीजी तस्वीर "सेगमेंट_एक्टिव" और ब्लैक फ़ॉन्ट है। onTouchDown में तो:

-(IBAction)onTopMenuTap:(id)sender 
{ 
    int newSelectedSegmentIndex; 
    if (sender == btnLeftSgm) 
     newSelectedSegmentIndex=0; 
    else if (sender == btnMiddleSgm) 
     newSelectedSegmentIndex=1; 
    else if (sender == btnRightSgm) 
     newSelectedSegmentIndex=2; 
    else 
     return; 

    NSLog(@"Tapped segment index %d while old one is %d",newSelectedSegmentIndex,selectedSegmentIndex); 

    if (newSelectedSegmentIndex==selectedSegmentIndex) 
     return; 

    [self handleSegmentAppearenace:newSelectedSegmentIndex]; 
//do whatever its need to be done 
... 
} 

और कहा जाता विधि

-(void)handleSegmentAppearenace:(int)newSelectedSegmentIndex 
{ 
    if (selectedSegmentIndex==0){ 
     [btnLeftSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_default_left"] forState:UIControlStateNormal]; 
     [btnLeftSgm setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     btnLeftSgm.highlighted = NO; 
    } 
    else if (selectedSegmentIndex==1){ 
     [btnMiddleSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_default_center"] forState:UIControlStateNormal]; 
     [btnMiddleSgm setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     btnMiddleSgm.highlighted = NO; 
    } 
    else if (selectedSegmentIndex==2){ 
     [btnRightSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_default_right"] forState:UIControlStateNormal]; 
     [btnRightSgm setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     btnRightSgm.highlighted = NO; 
    } 

    if (newSelectedSegmentIndex==0){ 
     [btnLeftSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_active_left"] forState:UIControlStateNormal]; 
     [btnLeftSgm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     btnLeftSgm.highlighted = YES; 
    } 
    else if (newSelectedSegmentIndex==1){ 
     [btnMiddleSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_active_center"] forState:UIControlStateNormal]; 
     [btnMiddleSgm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     btnMiddleSgm.highlighted = YES; 
    } 
    else if (newSelectedSegmentIndex==2){ 
     [btnRightSgm setBackgroundImage:[UIImage imageNamed:@"segmented_control_active_right"] forState:UIControlStateNormal]; 
     [btnRightSgm setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     btnRightSgm.highlighted = YES; 
    } 
} 

सभी तीन बटन इसी गुण के लिए आईबी में बंधे हुए हैं है (btnRightSgm आदि)। टोपमेनूटैप पर "टच अप इवेंट" के लिए भी बाध्य है।
कैंट इसका सबसे अच्छा विचार कहें लेकिन यह मेरे लिए पूरी तरह से काम करता है।