ios - आईफोन UITextField-प्लेसहोल्डर पाठ रंग बदलें




(20)

आईओएस 6.0 + के लिए

[textfield setValue:your_color forKeyPath:@"_placeholderLabel.textColor"];

आशा करता हूँ की ये काम करेगा।

नोट: ऐप्पल आपके ऐप को अस्वीकार कर सकता है (0.01% संभावना) क्योंकि हम निजी एपीआई एक्सेस कर रहे हैं। मैं दो साल से अपनी सभी परियोजनाओं में इसका उपयोग कर रहा हूं, लेकिन ऐप्पल ने इसके लिए नहीं पूछा था।

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

मैं प्लेसहोल्डर के रूप में सामान्य पाठ का उपयोग किये बिना और प्लेसहोल्डर के व्यवहार की नकल करने के लिए सभी विधियों को ओवरराइड करने के बिना ऐसा करना पसंद करूंगा।

मेरा मानना ​​है कि अगर मैं इस विधि को ओवरराइड करता हूं:

- (void)drawPlaceholderInRect:(CGRect)rect

तो मुझे यह करने में सक्षम होना चाहिए। लेकिन मुझे यकीन है कि इस विधि के भीतर वास्तविक प्लेसहोल्डर ऑब्जेक्ट को कैसे एक्सेस किया जाए।


स्विफ्ट 3.0 + स्टोरीबोर्ड

स्टोरीबोर्ड में प्लेसहोल्डर रंग बदलने के लिए, अगले कोड के साथ एक एक्सटेंशन बनाएं। (यदि आप सोचते हैं, तो यह कोड अपडेट करने के लिए स्वतंत्र महसूस करें, यह स्पष्ट और सुरक्षित हो सकता है)।

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            guard let currentAttributedPlaceholderColor = attributedPlaceholder?.attribute(NSForegroundColorAttributeName, at: 0, effectiveRange: nil) as? UIColor else { return UIColor.clear }
            return currentAttributedPlaceholderColor
        }
        set {
            guard let currentAttributedString = attributedPlaceholder else { return }
            let attributes = [NSForegroundColorAttributeName : newValue]

            attributedPlaceholder = NSAttributedString(string: currentAttributedString.string, attributes: attributes)
        }
    }
}

स्विफ्ट 4 संस्करण

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            return attributedPlaceholder?.attribute(.foregroundColor, at: 0, effectiveRange: nil) as? UIColor ?? .clear
        }
        set {
            guard let attributedPlaceholder = attributedPlaceholder else { return }
            let attributes: [NSAttributedStringKey: UIColor] = [.foregroundColor: newValue]
            self.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string, attributes: attributes)
        }
    }
}

आईओएस 6 और बाद में UITextField पर "जिम्मेदार प्लेसहोल्डर" प्रदान करता है। आईओएस 3.2 और बाद में एनएसएमयूटेबलएट्रिब्यूटेड स्ट्रिंग पर "सेट एट्रिब्यूट्स: रेंज:" प्रदान करता है।

आप निम्नलिखित कर सकते हैं:

    NSMutableAttributedString *ms = [[NSMutableAttributedString alloc] initWithString:self.yourInput.placeholder];
    UIFont *placeholderFont = self.yourInput.font;
    NSRange fullRange = NSMakeRange(0, ms.length);
    NSDictionary *newProps = @{NSForegroundColorAttributeName:[UIColor yourColor], NSFontAttributeName:placeholderFont};
    [ms setAttributes:newProps range:fullRange];
    self.yourInput.attributedPlaceholder = ms;

आईओएस 6 में UIViews में जिम्मेदार तारों की शुरूआत के बाद से, प्लेसहोल्डर पाठ को इस तरह के रंग को असाइन करना संभव है:

if ([textField respondsToSelector:@selector(setAttributedPlaceholder:)]) {
  UIColor *color = [UIColor blackColor];
  textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderText attributes:@{NSForegroundColorAttributeName: color}];
} else {
  NSLog(@"Cannot set placeholder text's color, because deployment target is earlier than iOS 6.0");
  // TODO: Add fall-back code to set placeholder color.
}

आईओएस 7 में प्लेसहोल्डर दोनों के लंबवत और क्षैतिज संरेखण के साथ-साथ दोनों को संभालने के लिए। drawInRect और drawAtPoint अब वर्तमान संदर्भ fillColor का उपयोग नहीं करते हैं।

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html

Obj सी

@interface CustomPlaceHolderTextColorTextField : UITextField

@end


@implementation CustomPlaceHolderTextColorTextField : UITextField


-(void) drawPlaceholderInRect:(CGRect)rect  {

  if (self.placeholder)
  {

    // color of placeholder text
    UIColor *placeHolderTextColor = [UIColor redColor];

    CGSize drawSize = [self.placeholder sizeWithAttributes:[NSDictionary dictionaryWithObject:self.font forKey:NSFontAttributeName]];
    CGRect drawRect = rect;

    // verticially align text
    drawRect.origin.y = (rect.size.height - drawSize.height) * 0.5;

    // set alignment
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.alignment = self.textAlignment;

    // dictionary of attributes, font, paragraphstyle, and color
    NSDictionary *drawAttributes = @{NSFontAttributeName: self.font,
                                     NSParagraphStyleAttributeName : paragraphStyle,
                                     NSForegroundColorAttributeName : placeHolderTextColor};


    // draw
    [self.placeholder drawInRect:drawRect withAttributes:drawAttributes];

 }

}

@end

आप UIAppearance विधि का उपयोग क्यों नहीं करते हैं:

[[UILabel appearanceWhenContainedIn:[UITextField class], nil] setTextColor:[UIColor whateverColorYouNeed]];

आप प्लेसहोल्डर टेक्स्ट रंग को किसी भी रंग में बदल सकते हैं जिसे आप नीचे दिए गए कोड का उपयोग करके चाहते हैं।

UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];

आसान और दर्द रहित, कुछ के लिए एक आसान विकल्प हो सकता है।

_placeholderLabel.textColor

उत्पादन के लिए सुझाव नहीं दिया गया है, ऐप्पल आपके सबमिशन को अस्वीकार कर सकता है।


एक अन्य विकल्प जिसे उप-वर्गीकरण की आवश्यकता नहीं है - प्लेसहोल्डर को खाली छोड़ दें, और संपादन बटन के शीर्ष पर एक लेबल डालें। लेबल को प्रबंधित करें जैसे आप प्लेसहोल्डर का प्रबंधन करेंगे (उपयोगकर्ता इनपुट को एक बार साफ़ करने के बाद साफ़ करें ..)


एकाधिक रंग के साथ जिम्मेदार टेक्स्टफील्ड प्लेसहोल्डर सेट करने के लिए,

बस पाठ निर्दिष्ट करें,

  //txtServiceText is your Textfield
 [email protected]"Badal/ Shah";
    NSMutableAttributedString *mutable = [[NSMutableAttributedString alloc] initWithString:_txtServiceText.placeholder];
     [mutable addAttribute: NSForegroundColorAttributeName value:[UIColor whiteColor] range:[_txtServiceText.placeholder rangeOfString:@"Badal/"]]; //Replace it with your first color Text
    [mutable addAttribute: NSForegroundColorAttributeName value:[UIColor orangeColor] range:[_txtServiceText.placeholder rangeOfString:@"Shah"]]; // Replace it with your secondcolor string.
    _txtServiceText.attributedPlaceholder=mutable;

आउटपुट: -


निम्नलिखित केवल आईओएस 6 + के साथ (जैसा कि अलेक्जेंडर डब्ल्यू की टिप्पणी में दर्शाया गया है):

UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
   [[NSAttributedString alloc]
       initWithString:@"Full Name"
       attributes:@{NSForegroundColorAttributeName:color}];

मुझे पहले से ही इस मुद्दे का सामना करना पड़ा था। कोड के नीचे mycase में सही है।

[textField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

उम्मीद है, यह आपकी मदद कर सकता है। यह 7.0 और ऊपर के लिए काम कर रहा है।


मैं xcode के लिए नया हूँ और मुझे एक ही प्रभाव के आसपास एक रास्ता मिला।

मैंने वांछित प्रारूप के साथ जगह धारक के स्थान पर एक यूलाबेल रखा और इसे छुपाया

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    switch (textField.tag)
    {
        case 0:
            lblUserName.hidden=YES;
            break;

        case 1:
            lblPassword.hidden=YES;
            break;

        default:
            break;
    }
}

मैं इसके आसपास एक काम से सहमत हूं और असली समाधान नहीं बल्कि प्रभाव इस link से प्राप्त हुआ था

नोट: अभी भी आईओएस 7 पर काम करता है: |


मैं एक और समाधान का सुझाव दूंगा। चूंकि प्लेसहोल्डर टेक्स्ट टेक्स्टफील्ड की डिफ़ॉल्ट फ़ॉन्ट सेटिंग्स का उपयोग करता है, इसलिए बस इच्छित प्लेसहोल्डर फ़ॉन्ट रंग पर प्रारंभिक फ़ॉन्ट रंग सेट करें। फिर अपने UITextField के प्रतिनिधि को सेट करें और निम्न विधियों को लागू करें:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    //set color for text input
    textField.textColor = [UIColor blackColor];
    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
    //set color for placeholder text
    textField.textColor = [UIColor redColor];
    return YES;
}

इसलिए, यदि कोई उपयोगकर्ता टेक्स्टफील्ड में टाइप करना शुरू करता है तो टेक्स्ट का रंग काला हो जाता है और टेक्स्टफील्ड को फिर से साफ़ करने के बाद प्लेसहोल्डर टेक्स्ट लाल रंग में फिर से दिखाई देगा।

चीयर्स, उर्फ


यह स्विफ्ट <3.0 में काम करता है:

myTextField.attributedPlaceholder = 
NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])

आईओएस 8.2 और आईओएस 8.3 बीटा 4 में परीक्षण किया गया।

स्विफ्ट 3:

 myTextfield.attributedPlaceholder =
  NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.red])

शायद आप इस तरह से प्रयास करना चाहते हैं, लेकिन ऐप्पल आपको निजी ivar तक पहुंचने के बारे में चेतावनी दे सकता है:

[self.myTextField setValue:[UIColor darkGrayColor] 
                forKeyPath:@"_placeholderLabel.textColor"];

ध्यान दें
मार्टिन एलियस के मुताबिक यह आईओएस 7 पर काम नहीं कर रहा है।


स्विफ्ट में:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSForegroundColorAttributeName: UIColor.blackColor()])
}

स्विफ्ट 4.0 में:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSAttributedStringKey.foregroundColor: UIColor.black])
}

स्विफ्ट संस्करण। शायद यह किसी की मदद करेगा।

class TextField: UITextField {
   override var placeholder: String? {
        didSet {
            let placeholderString = NSAttributedString(string: placeholder!, attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])
            self.attributedPlaceholder = placeholderString
        }
    }
}

तेजी से 3.X में

passwordTxtField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes:[NSForegroundColorAttributeName: UIColor.black])

स्विफ्ट 3 में

 import UIKit
    let TEXTFIELD_BLUE  = UIColor.blue
    let TEXTFIELD_GRAY  = UIColor.gray
    class DBTextField: UITextField
    {
    /// Tetxfield Placeholder Color
        @IBInspectable var palceHolderColor: UIColor = TEXTFIELD_GRAY
    func setupTextField () {

            self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "",
                                                            attributes:[NSForegroundColorAttributeName: palceHolderColor])
    }
    }
    class DBLocalizedTextField : UITextField{

        override func awakeFromNib() {
            super.awakeFromNib()

            self.placeholder = self.placeholder
        }
    }




uitextfield