2012-11-03 30 views
6

सामने सवाल:क्या हम फ़ॉन्ट नाम बदलने के बजाय सीधे NSFont के फ़ॉन्ट-वेट या फ़ॉन्ट-शैली सेट कर सकते हैं?

हम सीधे एक जिम्मेदार ठहराया स्ट्रिंग के लिए font-weight और फ़ॉन्ट शैली जानकारी का उपयोग कर सकते हैं? या क्या हम एक नई स्ट्रिंग बना सकते हैं जिसके लिए हम इस जानकारी को सेट करने में सक्षम हैं?

स्पष्टीकरण:

iOS 6 में, यदि आप एक चयन के रूप में बोल्ड या इटैलिक बदल सकते हैं। लेकिन जिस तरह से यह काम करता है वह परेशान है: यह NSFontAttributeName को नहीं बदलेगा कि ऐप्पल ने हमें उजागर किया है (उदाहरण के लिए फ़ॉन्ट नाम बदलना, "हेल्वेतिकाएयू" से "हेल्वेतिकाएयू-बोल्ड")। इसके बजाए, यह फ़ॉन्ट-परिवार को "हेल्वेटिका नियू" के रूप में संरक्षित करता है और शैली स्ट्रिंग में बोल्ड करने के लिए "फ़ॉन्ट-वेट" को बदलता है। आप इसके विवरण के लिए जिम्मेदार ठहराया पाठ का एक उदाहरण पूछने के लिए थे, तो आप अपने फॉन्ट जानकारी के लिए कुछ इस तरह देखना होगा:

NSFont = "<UICFFont: 0x1fbc53a0> font-family: \"Helvetica Neue\"; font-weight: bold; font-style: normal; font-size: 16px"; 

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

यदि आप अन्य मार्ग पर जाते हैं और अपने UITextView में "टॉगल बोल्डफेस" और "टॉगल इटैलिक" को ओवरराइड करने का प्रयास करते हैं, तो वास्तव में स्टाइल स्ट्रिंग में शैली की जानकारी को बदलने से रोकने की प्रतीत नहीं होती है। ऐसा लगता है कि आप टॉगल ईवेंट के दौरान अकेले फ़ॉन्ट नाम बदल सकते हैं।

तो, फिर, सवाल: क्या हम किसी भी तरह से फ़ॉन्ट-वेट और फ़ॉन्ट-शैली की जानकारी सीधे एक्सेस कर सकते हैं? या क्या हम एक नई स्ट्रिंग बना सकते हैं जिसके लिए हम इस जानकारी को सेट करने में सक्षम हैं? यह एक फ़ॉन्ट से दूसरे में स्विच करने और शैली की जानकारी को संरक्षित करने की कोशिश करने की समस्या का समाधान करेगा।

और एक डबल स्पष्टीकरण:

हम iOS के बारे में बात कर रहे हैं। जब आप वर्णों की कुछ श्रेणी के लिए एक जिम्मेदार स्ट्रिंग के फ़ॉन्ट विशेषता (NSFontAttributeName) सेट करते हैं, तो आंतरिक रूप से आईओएस एक स्टाइल स्ट्रिंग के साथ एक NSFont बनाता है। शैली स्ट्रिंग "फ़ॉन्ट-वेट: सामान्य; फ़ॉन्ट-शैली: सामान्य" पढ़ेगी यदि आपने स्वयं एक फ़ॉन्ट विशेषता सेट की है। लेकिन यह स्टाइल स्ट्रिंग वह जगह है जहां UITextView (टॉगलिंग द्वारा) में बोल्ड और इटैलिक जानकारी सेट की जाती है।

+0

आपको कम से कम एक बार अपने प्रश्न में कुछ संपादित करने की आवश्यकता होगी: एनएसफ़ॉन्ट मैकोज़ के लिए है, जबकि *** यूआईएफओटी *** आईओएस के लिए है; आप किस वास्तुकला का उपयोग कर रहे हैं और/या आप किस फ़ॉन्ट क्लास का उपयोग कर रहे हैं? –

+0

मुझे डर है कि यह सही नहीं है। आप अपने जिम्मेदार स्ट्रिंग (यूआईएफओटी को डिज़ाइन करके) के लिए एक विशेषता के रूप में एक NSFontAttributeName बनाते हैं, और आंतरिक रूप से आईओएस इसे एनएसफ़ॉन्ट में बदल देता है। इस प्रकार, कोड जो मैंने शामिल किया है, वह कहता है कि "एनएसफ़ॉन्ट" वह है जो आप पढ़ेंगे यदि आप NSLog का उपयोग करके इसके विवरण के लिए जिम्मेदार पाठ का एक टुकड़ा पूछते हैं। –

+0

अधिक विशेष रूप से, एनएसएफओटी जानकारी उस विवरण का हिस्सा है जो आप पढ़ेंगे यदि आप इसके विवरण के लिए एनएसएट्रिब्यूटेड स्ट्रिंग से पूछते हैं। –

उत्तर

1

ऐसा लगता है कि एक CTFontAttributesRef जहां विशेषता कुंजी kCTFontWeightTrait और/या kCTFontSymbolicTrait के लिए मूल्य निर्धारित किया है का उपयोग कर एक नया CTFontRef बनाने में सक्षम हो सकता है। क्या उससे मदद हुई?

सीएफ। CTFontDescriptorReference और CTFontReference

संपादित

अनुमान इस काम नहीं करेगा - मैं और अधिक अपने आप इसे में देखा ...अगर किसी और के पास एक ही विचार है तो इसे यहां छोड़ दें।

+0

एक बार यह बनाया गया है, इसे एनएसएट्रिब्यूटेड स्ट्रिंग पर कैसे लागू किया जा सकता है? जब मैं गुणों का एक शब्दकोश बना रहा हूं, उदाहरण के लिए, क्या इसका उपयोग NSFontAttributeName को सेट करते समय यूआईएफओटी के बजाय किया जा सकता है? –

+0

ओह, मेरा मानना ​​है कि यह मेरे प्रश्न का उत्तर देता है: सीटीएफओटी को यूआईएफओटी में परिवर्तित करना। http://stackoverflow.com/questions/6714858/iphone-convert-ctfont-to-uifont यदि कोई समस्या है तो मैं वापस रिपोर्ट करूंगा, या अगर यह काम करता है तो मैं जवाब स्वीकार करूंगा। लेकिन मुझे लगता है कि तुमने मुझे ट्रैक पर प्राप्त कर लिया है। धन्यवाद। –

+0

आखिरकार मुझे नहीं लगता कि यह काम करेगा। जैसा कि मैं इसे समझता हूं (और कुछ प्रयासों के बाद), आप UITextView में CoreText फोंट का उपयोग नहीं कर सकते हैं। क्या मैं उस बारे में गलत हूं? –