2011-08-30 18 views
5

पर राउंड रेक्ट बटन पृष्ठभूमि रंग बदलें, जब मैं चयनित होता हूं तो बटन के पृष्ठभूमि रंग को बदलने की कोशिश कर रहा हूं और छवि का उपयोग नहीं करना चाहता हूं।राज्य हाइलाइट किए गए

[mBtn setBackgroundColor:[UIColor grayColor] forState:UIControlStateHighlighted]; 

कोई विचार?

उत्तर

6
[mBtn setTintColor:[UIColor grayColor]]; 

यह केवल हाइलाइट किए गए राज्य को प्रभावित करता है, इसलिए मेरा मानना ​​है कि यह वही है जो आप खोज रहे हैं।

आप इसे से इंटरफ़ेस बिल्डर से भी सेट कर सकते हैं, टिंट ड्रॉप-डाउन मेनू हाइलाइट करें।

+0

यह काम नहीं करता है, मुझे 'UIButton' '-setTintColor:' 'UIButton' का जवाब नहीं दे सकता है 'setTintColor:' – Syntax

+0

आप सही हैं, मैंने फिर से जांच की है, और यह केवल आईओएस के लिए काम करता है 5.0 और बाद में। इस मामले में, आपको एक UIView बनाना होगा, इसके पृष्ठभूमि रंग को सेट करना होगा, और हाइलाइट किए गए राज्य के लिए पृष्ठभूमि दृश्य के रूप में इस दृश्य का उपयोग करना होगा। – antalkerekes

+0

ठीक है, मैं आईओएस 5 को एक जाऊंगा। – Syntax

0

इस तरह की कोई विधि नहीं है, setBackgroundColor: forState:

चेक प्रलेखन। आपको छवि का उपयोग करने की आवश्यकता है।

+1

थोड़ा सा मूर्खतापूर्ण है, फिर एक रंग परिवर्तन के लिए एक छवि लोड करने के लिए। – Syntax

+0

@syntax क्षमा करें ब्रो तो आपके पास कोई विकल्प नहीं है। – Ishu

10

मैं इस पुराने धागे का जवाब दे रहा हूं क्योंकि यह इस समस्या के समाधान के लिए निरंतर खोज में आता है और मैंने कहीं और समाधान नहीं देखा है। यह वास्तव में कष्टप्रद है कि setTintColor केवल UIButton की हाइलाइट की गई स्थिति पर लागू होता है। छह महीने पहले, यह उतना ही परेशान था कि यह केवल आईओएस 5 पर लागू होता था, लेकिन उम्मीद है कि आगे आने वाली कोई समस्या कम होगी। इस बात को ध्यान में रखते हुए, मैंने अपने सामान्य राज्य में बटनों के समूह को टिन करने के लिए एक सामान्य उद्देश्य समाधान को मिश्रित करने के लिए कई समुदाय सुझावों को तैयार किया है और संयुक्त किया है।

नीचे दी गई विधि UIButtons के एनएसएआरएआरई और इनपुट के रूप में रंग विनिर्देशों का एक सेट स्वीकार करती है। यह setTintColor का उपयोग करके एक बटन पर रंग विनिर्देशों को लागू करता है, परिणाम को UIImage में प्रस्तुत करता है, और उस छवि को बटन के पूरे सेट की पृष्ठभूमि छवि के रूप में लागू करता है। यह बटन रंगों के लिए अलग छवि फ़ाइलों को बनाने की आवश्यकता से बचाता है। साथ ही, यह एक खिंचाव वाली छवि का उपयोग करके ऐसा करता है ताकि यह विभिन्न आकारों के बटनों के संग्रह के साथ काम कर सके (हालांकि ध्यान दें कि यह UIButton के डिफ़ॉल्ट कोने राउंडिंग कारकों को मानता है)। मुझे आशा है कि आपको आईओएस 5 लक्ष्यों के लिए यह उपयोगी लगेगा।

- (void) setColorOfButtons:(NSArray*)buttons red:(float)red green:(float)green blue:(float)blue alpha:(float)alpha { 

    if (buttons.count == 0) { 
     return; 
    } 

    // get the first button 
    NSEnumerator* buttonEnum = [buttons objectEnumerator]; 
    UIButton* button = (UIButton*)[buttonEnum nextObject]; 

    // set the button's highlight color 
    [button setTintColor:[UIColor colorWithRed:red/255.9999f green:green/255.9999f blue:blue/255.9999f alpha:alpha]]; 

    // clear any existing background image 
    [button setBackgroundImage:nil forState:UIControlStateNormal]; 

    // place the button into highlighted state with no title 
    BOOL wasHighlighted = button.highlighted; 
    NSString* savedTitle = [button titleForState:UIControlStateNormal]; 
    [button setTitle:nil forState:UIControlStateNormal]; 
    [button setHighlighted:YES]; 

    // render the highlighted state of the button into an image 
    UIGraphicsBeginImageContext(button.layer.frame.size); 
    CGContextRef graphicsContext = UIGraphicsGetCurrentContext(); 
    [button.layer renderInContext:graphicsContext]; 
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIImage* stretchableImage = [image stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
    UIGraphicsEndImageContext(); 

    // restore the button's state and title 
    [button setHighlighted:wasHighlighted]; 
    [button setTitle:savedTitle forState:UIControlStateNormal]; 

    // set background image of all buttons 
    do { 
     [button setBackgroundImage:stretchableImage forState:UIControlStateNormal]; 
    } while (button = (UIButton*)[buttonEnum nextObject]);  
} 
+1

कृपया ध्यान दें कि '[बटन शीर्षक फॉरस्टेट: यूआईसींट्रोलस्टेट नॉर्मल]' जब यह सेट नहीं होता है तो अमान्य ऑब्जेक्ट वापस कर सकता है (उदाहरण के लिए आईबी के माध्यम से काम करते समय), क्योंकि मैं इस लाइन को 'एनएसएसटींग सेव किया गया टाइटल = [बटन शीर्षक लेबल] .text;' काम करता है, तो आप शायद एक चेक जोड़ना चाहें हालांकि मुझे यकीन नहीं है कि वास्तव में क्या जांच होनी चाहिए (क्योंकि यह शून्य नहीं लौटाता है, यह शीर्षक में सेट होने पर INVALID ऑब्जेक्ट और क्रैश देता है) –

+0

टिप इशाक के लिए धन्यवाद। एक ही समस्या का सामना कर रहा था ... –

4
बस लोगों की है कि यहां पहुंचेंगे मैं जब प्रकाश डाला राज्य के लिए पृष्ठभूमि रंग बदलने के लिए खोज की थी के लिए

...

मैं एक UIButton उपवर्ग backgroundHighlightColor और पटरियों के माध्यम से प्रकाश डाला के लिए एक संपत्ति है कि के साथ समाप्त हो गया KVO। यहां गिटहब का लिंक दिया गया है: SOHighlightButton

यदि आपको हाइलाइट किया गया है तो UIButton को बदलने के लिए आपको अन्य/अन्य गुणों की आवश्यकता होने पर इसे किसी अन्य परिदृश्य में अनुकूलित करने में सक्षम होना चाहिए।

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