2012-01-11 15 views
6

मुझे इंटेफेस बिल्डर का उपयोग करके कई पीले बटन बनाए गए हैं। सभी का एक ही रंग है। वर्तमान में मैं प्रत्येक xib में रंग घोषित करता हूं। क्या मैं इसे वैश्विक रूप से घोषित कर सकता हूं और सभी xibs में पुन: उपयोग कर सकता हूं?क्या मैं इंटरफ़ेस बिल्डर में रंगों का पुन: उपयोग कर सकता हूं?

+1

"इंटरफ़ेस बिल्डर में" का कौन सा हिस्सा इस प्रश्न का उत्तर देने वाले प्रत्येक व्यक्ति को समझने में असफल रहा? अजीब। –

+1

@MarkAmery इसका मतलब है, ऐसा करने का एकमात्र तरीका _code_ का उपयोग करना है। – Tricertops

+0

यह वास्तव में मूर्खतापूर्ण है कि ऐसा करने का कोई तरीका नहीं है। आईबी में 100 पृष्ठों में एक रंग को समायोजित करना कौन चाहता है? – Jonny

उत्तर

-1

सबसे निश्चित रूप से!

एक सिंगलटन वस्तु बनाएं (आप इसे कॉल कर सकते हैं OksanaColor, शांत होने के लिए) ...

... या, यदि आप वास्तव में आलसी हो, रीड-ओनली UIColor संपत्ति आप से उपयोग कर सकते हैं कि आपके ऐप प्रतिनिधि

-1

आप यूआईसीओलर पर एक श्रेणी भी जोड़ सकते हैं, ताकि आप यूआईसीओलर का उपयोग करते समय इसका उपयोग कर सकें। उदाहरण के लिए मेरे ऐप में मैं एप्लिकेशनकॉलर्स नामक एक नई फाइल जोड़ता हूं जिसमें मेरे सभी ऐप रंग होते हैं।

@interface UIColor (ApplicationColours) 

+(UIColor *)savaColor; 

@end 

कार्यान्वयन:

@implementation UIColor (ApplicationColours) 

+(UIColor *)savaColor 
{ 
    return [UIColor colorWithRed:228.0f/255.0f green:86.0f/255.0f blue:86.0f/255.0f alpha:1.0f]; 

} 

@end 

तब मेरे एप्लिकेशन में इसका इस्तेमाल करने की, मैं ApplicationColours.h आयात और किसी भी अन्य UIColor के रूप में ही इस्तेमाल करते हैं। अर्थात:

label.textColor = [UIColor savaColor]; 
+1

आप + savaColor को उस रंग के लिए स्थिर चर रखना चाहते हैं, ताकि यह हर बार एक नया उदाहरण नहीं बना रहा हो। – NSResponder

+0

हाँ अच्छी सोच @NSResponder कभी इसके बारे में सोचा नहीं :) –

+2

मैं इसे कोड में नहीं करना चाहता हूं। मैं इंटरफेस बिल्डर के अंदर सेट करना चाहता हूँ। – Oksana

-2

यहाँ UIColor के लिए एक नामित रंग श्रेणी का एक बहुत ही सरल कार्यान्वयन है। अपनी परियोजना में इस कोड के साथ, UIColor किसी भी रंग आप सहेजना चाहते हैं याद होगा, और का उपयोग कर +colorWithName:

@interface UIColor (namedColors) 

+ (UIColor *) colorWithName:(NSString *) name; 
+ (void) setColor:(UIColor *) color forName:(NSString *) name; 

@end 

static NSMutableDictionary *colorStorage; 

@implementation UIColor (namedColors) 

+ (NSMutableDictionary *) colorStorage 
{ 
    if (!colorStorage) 
    colorStorage = [[NSMutableDictionary alloc] initWithCapacity:10]; 
    return colorStorage; 
} 

+ (UIColor *) colorWithName:(NSString *) name 
{ 
    UIColor *result =[[self colorStorage] valueForKey:name]; // See if we have a color with this name in the colorStorage. 

    if (result) return result; 

    SEL selector = NSSelectorFromString(name); // look for a class method whose selector matches the given name, such as "blueColor" or "clearColor". 

    if ([self respondsToSelector:selector] && (result = [self performSelector:selector])) 
    if ([result isKindOfClass:[self class]]) 
     return result; 

    return nil; 
} 

+ (void) setColor:(UIColor *) color forName:(NSString *) name 
{ 
    [[self colorStorage] setValue:color forKey:name]; 
} 

@end 
+0

शायद बहुत जटिल? सरल '[यूआईसीओलर myRedcolor] 'या' [UIColor anotherRedColor] 'पर्याप्त और सरल होगा, नहीं? – Tricertops

3

हाँ, आप यह कर सकते हैं आप अपने स्वयं के रंग या सिस्टम रंगों का उपयोग करने देगा।

इंटरफ़ेस बिल्डर में रंग पिकर पॉपअप के नीचे, वर्गों की एक पंक्ति है जिसका उपयोग आप बाद के उपयोग के लिए रंगों को संग्रहीत करने के लिए कर सकते हैं। उस रंग को आयताकार से खींचें जहां वर्तमान रंग रंगीन पिकर के शीर्ष पर इसे संग्रहीत करने के लिए दिखाया गया है, और फिर इसे उपयोग करने के लिए बाद में संग्रहीत रंग पर क्लिक करें।

diagram showing how to save colors

+1

जब आप इसे बदलने का निर्णय लेते हैं तो यह आपको रंग को फिर से लागू करने की अनुमति नहीं देगा। लेकिन यह मैन्युअल पुन: उपयोग के लिए रंगों को सहेजने का एकमात्र आदिम तरीका है। – Tricertops

+0

@iMartin आप सही हैं कि यह एक चिंता है, और मैंने इसे नहीं माना था। कुछ हैकर के साथ, हालांकि, इस विधि का उपयोग करते समय भी आप वैश्विक रूप से एक रंग को स्वैप कर सकते हैं। यदि आप अपने स्टोरीबोर्ड पर एक रंग बदलना चाहते हैं, तो स्टोरीबोर्ड के अंतर्निहित एक्सएमएल (या अपनी परियोजना में सभी एक्सआईबी) में उस रंग का प्रतिनिधित्व करने वाले टैग की सभी घटनाओं को ढूंढें और बदलें। यह एक हैक है, लेकिन यह काम करेगा, और ऐसा कुछ नहीं है जिसे आपको अक्सर करने की आवश्यकता होगी। –

7

नहीं इंटरफ़ेस बिल्डर में संभव। कोड में ऐसा करें, उदाहरण के लिए बटन के विशेष उप-वर्ग बनाकर।

आप रंग को बचाने के लिए सिस्टम कलर पैलेट का उपयोग कर सकते हैं, लेकिन जब भी आप इसे बदलने का निर्णय लेते हैं तब भी आपको इसे सभी बटनों पर लागू करने की आवश्यकता होती है। या आप रंग चयनकर्ता में हाल ही में प्रयुक्त रंगों का उपयोग कर सकते हैं, लेकिन न तो रास्ता पर्याप्त गतिशील है।

+0

वास्तव में प्रश्न का उत्तर देने के लिए धन्यवाद। – KPM

1

मुझे विश्वास नहीं है कि दुर्भाग्य से इंटरफेस बिल्डर में इसे पूरी तरह से करने का कोई तरीका है। हालांकि, आप थोड़ा सा कोड के साथ बहुत करीब आ सकते हैं। तब

@interface HuedUILabel : UILabel 
@end 

@implementation HuedUILabel 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     // Initialization code 
     self.textColor = [AppConfig primaryColor]; 
    } 
    return self; 
} 

@end 

: सबसे अच्छा तरीका है मैं एक ही बार में पूरे एप्लिकेशन में रंग बदलने में सक्षम हो पाया है आइटम है कि आप रंग के लिए चाहते हैं (UILabel, उदाहरण के लिए) उपवर्ग के प्रारंभ पर रंग सेट करने के लिए है ,

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

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