2012-07-03 17 views
13

हमने UILabel को हमारे ऐप्स में किसी दिए गए लेबल प्रकार के सभी उपयोगों के लिए मानक फोंट और रंग लागू करने में सक्षम होने के लिए बढ़ा दिया है। उदाहरण के लिए।UILabels पर प्रभाव नहीं ले रहे UIAabpearance प्रोग्रामेटिक रूप से

@interface UILabelHeadingBold : UILabel 
@end 

हमारे AppDelegate में, हम इस

[[UILabelHeadingBold appearance] setTextColor:<some color>]; 
[[UILabelHeadingBold appearance] setFont:<some font>]; 

तरह फ़ॉन्ट और रंग लागू जब हमारे XIB में एक UILabel जोड़ने, हम अब वर्ग का चयन कर सकते प्रकार UILabelHeadingBold का हो सकता है, और यह उम्मीद के रूप में काम करता है । लेबल को हमारे ऐपडिलेगेट में निर्दिष्ट अनुसार सही फ़ॉन्ट और रंग के साथ दिखाया गया है।

हालांकि, अगर हम प्रोग्रामेटिक रूप से लेबल बनाते हैं, उदाहरण के लिए।

UILabelHeadingBold *headingLabel = [[UILabelHeadingBold alloc] initWithFrame:CGRectMake(10, 10, 100, 30)]; 
[self.mainView addSubview:headingLabel]; 

UILabel अपेक्षित फ़ॉन्ट/रंग लागू नहीं होता है। हमें इन विशेषताओं को मैन्युअल रूप से लागू करना होगा।

क्या यूआईपीपीरेंस प्रोग्रामेटिक रूप से बनाए गए UI तत्वों पर प्रभाव डालने का कोई तरीका है, या क्या यह केवल XIB के भीतर उपयोग किए जाने पर ही काम करता है?

उत्तर

17
एप्पल प्रलेखन से

:

उपस्थिति अनुकूलन का समर्थन करने के लिए, एक वर्ग UI_APPEARANCE_SELECTOR के साथ चिह्नित किया जाना चाहिए UIAppearanceContainer प्रोटोकॉल और प्रासंगिक एक्सेसर तरीकों के अनुरूप होना चाहिए।

उदाहरण के लिए UINavigationBar.h में, tintColorUI_APPEARANCE_SELECTOR

@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR; 

के साथ चिह्नित है लेकिन UILabel.h में आप देख सकते हैं कि textColor और font propertys UI_APPEARANCE_SELECTOR के साथ चिह्नित नहीं कर रहे हैं, लेकिन जब इंटरफ़ेस में जोड़ा किसी भी तरह यह काम करता है बिल्डर (दस्तावेज़ीकरण के बाद इसे बिल्कुल काम नहीं करना चाहिए)।

+2

यह * * कभी कभी कोड में भी बनाया UILabels के लिए काम करता है, लेकिन परिणाम असंगत हैं, और आईओएस 5 के बीच व्यवहार अलग है और, ठीक है, आप जानते हैं। तो जानकारी के लिए 'UILabel's –

+0

+1 को कस्टमाइज़ करने के लिए बस' यूआईपीपीरेंस 'का उपयोग न करें, कि मैं अकेला नहीं हूं जो असंगत परिणाम प्राप्त करता है (मुझे आपकी टिप्पणी मिलने तक घंटे कोडिंग लेता है)। Robert.wijas समाधान के लिए +1 - कि अब मैं उपयोग करता हूं - और सबकुछ ठीक है। – anneblue

14

सरल हैक जो मेरे लिए कोई समस्या नहीं है, एक यूआईपीएपीरेंस सेटटर के साथ एक श्रेणी बनाना है जो UILabel गुणों को संशोधित करता है।

बाद UIAppearance सम्मेलनों मैं एक विधि बनाया:

- (void)setTextAttributes:(NSDictionary *)numberTextAttributes; 
{ 
    UIFont *font = [numberTextAttributes objectForKey:UITextAttributeFont]; 
    if (font) { 
     self.font = font; 
    } 
    UIColor *textColor = [numberTextAttributes objectForKey:UITextAttributeTextColor]; 
    if (textColor) { 
     self.textColor = textColor; 
    } 
    UIColor *textShadowColor = [numberTextAttributes objectForKey:UITextAttributeTextShadowColor]; 
    if (textShadowColor) { 
     self.shadowColor = textShadowColor; 
    } 
    NSValue *shadowOffsetValue = [numberTextAttributes objectForKey:UITextAttributeTextShadowOffset]; 
    if (shadowOffsetValue) { 
     UIOffset shadowOffset = [shadowOffsetValue UIOffsetValue]; 
     self.shadowOffset = CGSizeMake(shadowOffset.horizontal, shadowOffset.vertical); 
    } 
} 

UILabel श्रेणी में:

@interface UILabel (UISS) 

- (void)setTextAttributes:(NSDictionary *)numberTextAttributes UI_APPEARANCE_SELECTOR; 

@end 

मैं अभी भी यह पता लगाने की क्यों मूल सेटर काम नहीं करता है कोशिश कर रहा हूँ।

+0

हम एक उपclass में कस्टम गुण बनाते हैं जो उपस्थिति प्रॉक्सी के साथ काम करते हैं। जैसे UIButton के शीर्षक Label.font प्रॉपर्टी को लपेटने के लिए "titleLabelFont" प्रॉपर्टी। यह छाया के रूप में अन्य गुणों के लिए भी काम करता है। –

+0

@robert +1 बहुत अच्छा समाधान है। जब तक मुझे आपका जवाब नहीं मिल जाता तब तक मुझे घंटों तक कोडिंग लग गई। उसके लिए धन्यवाद। अब, सब ठीक काम करता है (और सरल)। – anneblue

+0

ग्रेट सॉल्यूशन, यह अन्य विचारों पर भी अच्छा काम करता है, जैसे कि शीर्षक लेबल सेट करने के लिए UIButton जैसे ऐप्पल ने सेटफॉन्ट: विधि को हटा दिया है। –

0

@ robert.wijas समाधान महान काम करता है!

आईओएस 7 के लिए और ऊपर की तरफ मैं एक वह इस्तेमाल किया 7+ के लिए हटा दिया जाता है, क्योंकि कुंजी अद्यतन करने के लिए किया था:

- (void)setTextAttributes:(NSDictionary *)numberTextAttributes; 
{ 
    UIFont *font = [numberTextAttributes objectForKey:NSFontAttributeName]; 
    if (font) { 
     self.font = font; 
    } 
    UIColor *textColor = [numberTextAttributes objectForKey:NSForegroundColorAttributeName]; 
    if (textColor) { 
     self.textColor = textColor; 
    } 
    UIColor *textShadowColor = [numberTextAttributes objectForKey:NSShadowAttributeName]; 
    if (textShadowColor) { 
     self.shadowColor = textShadowColor; 
    } 
    NSValue *shadowOffsetValue = [numberTextAttributes objectForKey:NSShadowAttributeName]; 
    if (shadowOffsetValue) { 
     UIOffset shadowOffset = [shadowOffsetValue UIOffsetValue]; 
     self.shadowOffset = CGSizeMake(shadowOffset.horizontal, shadowOffset.vertical); 
    } 
} 
+0

के लिए टेक्स्ट रंग बदलने में सक्षम नहीं हूं कृपया ध्यान दें कि आप NSShadowAttributeName विशेषता को सही तरीके से प्रबंधित नहीं कर रहे हैं; इसका मूल्य NSShadow है। –