2013-02-22 55 views
13

मैं प्लेसहोल्डर्स को अपने टेक्स्टफील्ड इटैलिक में बनाने की कोशिश कर रहा हूं, और चूंकि मेरा ऐप आईओएस 6.0 या नए को लक्षित कर रहा है, इसलिए कुछ और कस्टम रोल करने के बजाय attributedPlaceholder संपत्ति का उपयोग करने का निर्णय लिया। कोड इस प्रकार है:UITextField विशेषताकृत प्लेसहोल्डर का कोई प्रभाव नहीं है

NSString *plString = @"optional"; 
NSAttributedString *placeholder = [[NSAttributedString alloc] initWithString:plString 
     attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:15]}]; 
for (UITextField *t in myTextfields){ 
    t.placeholder = plString; 
    t.attributedPlaceholder = placeholder; 
} 

फिर भी प्लेसहोल्डर की स्टाइल अभी भी इटैलिक नहीं है, लेकिन नियमित पाठ, बस मद्धम के समान है। NSAttributedString काम करने के लिए मुझे क्या याद आ रही है?

+1

मैं आपकी समस्या को पुन: पेश कर सकते हैं और मुझे लगता है कि यह आईओएस में एक बग है। – Florian

उत्तर

16

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

आप पाठ फ़ील्ड के एक प्रतिनिधि को बनाने और इस तरह shouldChangeCharactersinRange का उपयोग करके ऐसा कर सकते हैं:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{  
    // If there is text in the text field 
    if (textField.text.length + (string.length - range.length) > 0) { 
     // Set textfield font 
     textField.font = [UIFont fontWithName:@"Font" size:14]; 
    } else { 
     // Set textfield placeholder font (or so it appears) 
     textField.font = [UIFont fontWithName:@"PlaceholderFont" size:14]; 
    } 

    return YES; 
} 
10

यह लगभग निश्चित रूप से एक बग है। documentation for the attributedPlaceholder property का दावा है कि अग्रभूमि रंग विशेषता के बावजूद स्ट्रिंग को ग्रे रंग का उपयोग करके खींचा जाएगा, लेकिन ऐसा नहीं है: आप अग्रभूमि और पृष्ठभूमि रंग दोनों सेट कर सकते हैं। दुर्भाग्यवश, फ़ॉन्ट विशेषता को बाहर निकाला जाता है और सिस्टम फ़ॉन्ट पर वापस लाया जाता है।

एक कामकाज के रूप में, मैं drawPlaceholderInRect: ओवरराइड करने और प्लेसहोल्डर को स्वयं ड्राइंग करने की सलाह देता हूं। इसके अतिरिक्त, आपको इस पर एक रडार दर्ज करना चाहिए और एक न्यूनतम नमूना प्रोजेक्ट शामिल करना चाहिए जो बग को प्रदर्शित करता है।

+0

ऐसा लगता है कि drawPlaceholderInRect: UITextField में नहीं कहा जाएगा। Http://stackoverflow.com/questions/1920783/drawtextinrect-on-uitextfield-not-called –

+0

कृपया मेरी टिप्पणी को अनदेखा करें, कि SO प्रश्न पुराना है और अब यह काम करता प्रतीत होता है। –

8

मैं सिर्फ अपने आप को इस मुद्दे पर ठोकर खाई। जाहिर है, प्लेसहोल्डर टेक्स्टफिल्ड को जो भी फ़ॉन्ट सौंपा जा रहा है वह ले जाएगा। बस टेक्स्टफील्ड के फ़ॉन्ट को सेट करें और आप अच्छे हैं।

सब कुछ के लिए, प्लेसहोल्डर के रंग की तरह, मैं अभी भी वापस attributedPlaceholder

+0

बहुत बढ़िया जवाब। मेरे लिए काम किया! – nimeshdesai

-1

iOS8/9/स्विफ्ट 2.0 करने के लिए जाना चाहते हैं - काम कर उदाहरण

func colorPlaceholderText(){ 
    var multipleAttributes = [String : NSObject]() 
    multipleAttributes[NSForegroundColorAttributeName] = UIColor.appColorCYAN() 
    //OK - comment in if you want background color 
    //multipleAttributes[NSBackgroundColorAttributeName] = UIColor.yellowColor() 
    //OK - Adds underline 
    //multipleAttributes[NSUnderlineStyleAttributeName] = NSUnderlineStyle.StyleDouble.rawValue 


    let titleString = "Search port/country/vessel..." 
    let titleAttributedString = NSAttributedString(string: titleString, 
     attributes: multipleAttributes) 


    self.textFieldAddSearch.attributedPlaceholder = titleAttributedString 
} 
+0

यह रंग के लिए काम करता है। लेकिन फ़ॉन्ट के लिए खुद नहीं – dmclean