सबसे अच्छा विकल्प निश्चित रूप से है एक लेबल में एक भी NSAttributedString
साथ ऐसा करते हैं, क्योंकि अपने अन्य विकल्प हैं:
उपयोग एकाधिक लेबल, उनके फ्रेम, हर बार कुछ बदल जाता है बदलने के लिए उन्हें चारों ओर ले जाने, वास्तव में कैसे विस्तृत एक अंतरिक्ष होना चाहिए यह पता लगाने, कर सुनिश्चित करें कि वे स्क्रीन के लिए बहुत व्यापक नहीं हैं या इन्हें देखना चाहिए, आदि। जैसा कि आप देख सकते हैं, यह बहुत दर्दनाक हो जाएगा।
शीर्ष पर जाएं और UIWebView
का उपयोग करें, जो एक लेबल को प्रदर्शित करने के लिए स्पष्ट रूप से ओवरकिल है, क्योंकि यह आपको इन सभी अद्भुत चीजें देता है जिन्हें आपको स्क्रॉलिंग और ज़ूम और जावास्क्रिप्ट और सामान की आवश्यकता नहीं है, और ये सभी विशेषताएं सीपीयू चक्र का उपयोग कर रही हैं, भले ही आप उनका उपयोग करें या नहीं, इसलिए यह निश्चित रूप से प्रदर्शन का एक अच्छा विकल्प नहीं है, विशेष रूप से यदि आप इनमें से बड़ी संख्या में हैं (उदाहरण के लिए तालिका में प्रत्येक सेल में दृश्य)
यदि आप एक ही स्ट्रिंग का उपयोग जबकि, सब आप सही तरीके से विशेषताओं के लिए पर्वतमाला की गणना करना है, आवंटितको विशेषता स्ट्रिंग 210 के attributedText
(नोट, आईओएस 6+ केवल, लेकिन आपके प्रश्न पर टैग द्वारा निर्णय लेना जो आपके लिए कोई समस्या नहीं है), और आप कर चुके हैं। मैं वर्तमान में अपने ऐप में काफी व्यापक रूप से इस दृष्टिकोण का उपयोग कर रहा हूं, और यह थोड़ी देर के लिए अच्छी तरह से काम कर रहा है (I इस पर बसने से पहले दो अन्य कोशिश करें, और वे काम करने के लिए काफी दर्दनाक थे)।
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 50, 300, 50)];
label.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:16.0];
[self.view addSubview:label];
NSString *category = @"Socks";
NSString *store = @"Apple Store";
NSMutableAttributedString *string = [[NSMutableAttributedString alloc]
initWithString:[NSString stringWithFormat:
@"in %@ at %@ — 1 day ago",
category, store]];
[string addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:[string.string rangeOfString:category]];
[string addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:[string.string rangeOfString:store]];
label.attributedText = string;
ध्यान रहे कि यदि अपेक्षा के अनुरूप काम नहीं होगा, उदाहरण के लिए, store
और category
का मूल्य हैं:
यहाँ एक जिम्मेदार ठहराया स्ट्रिंग का उपयोग ऐसा करने का एक बहुत ही बुनियादी उदाहरण है वही, चूंकि rangeOfString:
दिए गए स्ट्रिंग की पहली घटना पायेगा, जिसका अर्थ है कि श्रेणी स्ट्रिंग को दो बार हाइलाइट किया जा सकता है, और स्टोर स्ट्रिंग बिल्कुल नहीं है।
बेहतर उदाहरण:
NSString *in = @"in ";
NSString *category = @"in";
NSString *at = @" at ";
NSString *store = @"in";
NSString *text = [NSString stringWithFormat:@"%@%@%@%@ — 1 day ago",
in, category, at, store];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc]
initWithString:text];
[string addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(in.length, category.length)];
[string addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(in.length + category.length + at.length,
store.length)];
: यहाँ एक से थोड़ा अधिक उन्नत उदाहरण है कि, क्योंकि बराबर तार के तोड़ने नहीं होगा मैन्युअल रूप से पर्वतमाला की गणना करने के लिए होने का जोड़ा झुंझलाहट के साथ यद्यपि है इस तरह हमेशा सही तरीके से काम करेगा, भले ही आपके सभी तार बराबर हों, फिर भी यह थोड़ा अधिक लंबा कोड-वार है क्योंकि आपको हाइलाइट करने के लिए श्रेणियों की मैन्युअल रूप से गणना करना है (हालांकि यह फिर से नहीं है y एक प्रमुख मुद्दा या पूर्ण शब्दों में बहुत सारे कोड)।
अद्यतन: बस एक बोल्ड फ़ॉन्ट प्रयोग करने के लिए एक सरल उदाहरण जोड़ने, तो आप इसे देखने के लिए की जरूरत नहीं है:
[string addAttribute:NSFontAttributeName
value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]
range:NSMakeRange(in.length, category.length)];
[string addAttribute:NSFontAttributeName
value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]
range:NSMakeRange(in.length + category.length + at.length,
store.length)];
अधिक विशेषताओं के लिए NSAttributedString
UIKit
Additions Reference पर एक नज़र डालें कि आप जिस प्रभाव को चाहते हैं उसे प्राप्त करने के लिए आप स्ट्रिंग में जोड़ सकते हैं।
मैं वर्तमान में अपने ऐप में यह बिल्कुल कर रहा हूं, और मैं एक 'एनएसएमयूटेबल एट्रिब्यूटेड स्ट्रिंग' का उपयोग कर रहा हूं और इसमें हाइलाइट विशेषताओं को जोड़ रहा हूं। इस दृष्टिकोण के साथ मैंने देखा है कि एकमात्र नुकसान यह है कि विशेषताओं को जोड़ने के लिए सीमा की गणना करने के लिए यह परेशान है, क्योंकि लेबल टेक्स्ट को स्थानीयकृत किया जा सकता है, आदि – Greg