আইফোন UITextField - স্থানধারক পাঠ্যের রঙ পরিবর্তন করুন


566

আমি আমার UITextFieldকন্ট্রোলগুলিতে সেট করা স্থানধারীর পাঠ্যের রঙটি কালো করতে, পরিবর্তন করতে চাই ।

আমি স্থানধারক হিসাবে সাধারণ পাঠ্য ব্যবহার না করে এবং একটি স্থানধারকের আচরণ অনুকরণ করার জন্য সমস্ত পদ্ধতি ওভাররাইড না করেই এটি করতে পছন্দ করব।

আমি বিশ্বাস করি যদি আমি এই পদ্ধতিটি ওভাররাইড করি:

- (void)drawPlaceholderInRect:(CGRect)rect

তাহলে আমার এটি করা উচিত। তবে আমি নিশ্চিত না যে কীভাবে এই পদ্ধতির মধ্যে থেকে আসল স্থানধারক অবজেক্টটি অ্যাক্সেস করা যায়।

উত্তর:


804

আইওএস 6-এ ইউআইভিউজে বৈশিষ্ট্যযুক্ত স্ট্রিংগুলির সূচনা হওয়ার পরে, স্থানধারক পাঠ্যের জন্য একটি রঙ নির্ধারণ করা সম্ভব:

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.
}

2
এটি ভাল - তবে মনে রাখবেন এটি কাজ করার আগে আপনাকে
আইবিতে

4
এটি একটি প্রতিক্রিয়াতেও টপসিলিটর কলটিতে আবৃত করার উপযুক্ত - এটি ছাড়াই এই কোডটি 6.0 পূর্বের স্থাপনার টার্গেটে ক্র্যাশ হয়ে যাবে (অচেনা নির্বাচক উদাহরণ হিসাবে প্রেরণ করা হয়েছে)
গিজে

5
বর্ণগুলির জন্য দস্তাবেজগুলি attributedPlaceholderবর্ণ ব্যতীত পাঠ্যের বৈশিষ্ট্যগুলি ব্যবহার করে।
ম্যাট কনলি

1
এনট্রিবিউটটির জন্য এটি কেন কাজ করছে না এমন কোনও ধারণা - এনএসফন্টআট্রিবিউটনেম [[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
dev4u

3
আইওএস 7-এ আমি এই ত্রুটি পেয়েছি:[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
i_am_jorf

237

সহজ এবং ব্যথামুক্ত, কারও কারও পক্ষে সহজ বিকল্প হতে পারে।

_placeholderLabel.textColor

উত্পাদনের জন্য প্রস্তাবিত নয়, অ্যাপল আপনার জমাটি প্রত্যাখ্যান করতে পারে।


1
আপনি কি প্রযোজনায় এটি ব্যবহার করছেন? আমি একটি ব্যক্তিগত সম্পত্তি অ্যাক্সেস বোঝাতে চাই।
গেরি বোর্বস

11
দ্রুত অনুলিপি এবং পেস্ট করার জন্য আপনার উত্তরে পাঠ্য যুক্ত করুন। _প্লেসোল্ডারলাবেল.টেক্সট কালার
ফিলিইইইইপ

47
এই পদ্ধতিটি ব্যবহার করবেন না, আমি এটি এবং আইটিউন স্টোর ব্যবহার করেছি, আমার আবেদন প্রত্যাখ্যান করেছে।
আসাদ আলি

1
আমি মনে করি যে কোনও প্রকারের প্রাইভেট লাইব্রেরি পদ্ধতিতে কোনও কিছুর সমাধান হিসাবে কখনও সুপারিশ করা উচিত নয়
স্ক্রু

2
@ জাংলেদেভ _placeholderLabelএকটি ব্যক্তিগত সম্পত্তি। এই সমাধানটি ব্যক্তিগত এপিআই ব্যবহারের জন্য প্রত্যাখ্যানযোগ্য to
শন ক্লেডেক

194

drawPlaceholderInRect:(CGRect)rectস্থানধারক পাঠ্যটিকে ম্যানুয়ালি রেন্ডার করতে আপনি এটিকে ওভাররাইড করতে পারেন :

- (void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor blueColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:16]];
}

44
এরকম [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];কিছু সম্ভবত আরও ভাল। এইভাবে আপনি textAlignmentসম্পত্তি সম্মান করবে । আমি এটি আমার এসএসটিেক্সটফিল্ড ক্লাসে যুক্ত করেছি। আপনার প্রকল্পগুলিতে নির্দ্বিধায় ব্যবহার করুন।
স্যাম সোফেস

52
কোটেগ যা বলেছেন তা অবশ্যই করবেন না। বিভাগগুলির মাধ্যমে ওভাররাইড পদ্ধতিগুলি কখনও নয়। কখনও
জোশুয়া ওয়েইনবার্গ

8
@ জোশুয়াউইনবার্গ আপনার উত্থাপনের পিছনে কোনও সুনির্দিষ্ট কারণ রয়েছে কি?
কৃষ্ণন

5
@ কৃষ্ণান একটি বিভাগে সদৃশ পদ্ধতি প্রয়োগ করে সমর্থিত নয় এবং কোন পদ্ধতিটি ডাকা হবে, অথবা উভয়কে যদি ডাকা হয়, বা যে আদেশে ডাকা হবে তা আপনি কখনই নিশ্চিত করতে পারবেন না।
শান উডওয়ার্ড

8
আইওএস 7-তে আপনি পাঠ্যটিকে উল্লম্বভাবে কেন্দ্র করতে সিজিআরেক্টইনসেট (রেকট, 0, (rect.size.height - self.font.lineHeight) / 2.0) ব্যবহার করে রেক্টটিকে পরিবর্তন করতে পারেন।
ব্রায়ান এস

170

নীচের কোডটি ব্যবহার করে আপনি যে কোনও রঙে প্লেসহোল্ডার পাঠ্য রঙটি পরিবর্তন করতে পারেন।

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

6
সেরা উত্তর প্রস্তাবিত। কাজ করে এবং ডকুমেন্টেড এপিআই ব্যবহার করে।
ইয়ান হোয়ার

2
আপনি কীভাবে এইআইএসইচবারের জন্য এই কাজটি করবেন? কোনও বিশিষ্টপ্লেসহোল্ডার সম্পত্তি নেই।
গিলসেন্টস 88

1
এই উত্তরটি সঠিক নয় - দস্তাবেজ অনুযায়ী, attributedPlaceholder টেক্সট রঙ তথ্য উপেক্ষা করা হয় developer.apple.com/library/ios/documentation/UIKit/Reference/...
Adlai Holler

ধন্যবাদ সবাইকে. আশা করি এটি কিছুটা সহায়ক ছিল। অ্যাডলাই হোলার চেষ্টা করে দেখুন ভাই !!! এই উত্তরটি iOS এর পূর্ববর্তী সংস্করণটির জন্য ছিল। আপনার যদি আরও ভাল উত্তর থাকে তবে আমরা পরামর্শের জন্য উন্মুক্ত।
মঞ্জু

কোনও বৈশিষ্ট্যযুক্ত স্থানধারক সম্পত্তি না থাকায় iOS8 এ কাজ করে না
বেন ক্লেটন

157

হতে পারে আপনি এইভাবে চেষ্টা করতে চান তবে অ্যাপল ব্যক্তিগত আইভার অ্যাক্সেস সম্পর্কে আপনাকে সতর্ক করতে পারে:

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

দ্রষ্টব্য,
এটি আর আইওএস 7-তে কাজ করছে না, মার্টিন অ্যালাসের মতে।


6
আমি আমার অ্যাপে এই পদ্ধতিটি ব্যবহার করি। পর্যালোচনা ঠিক ছিল। সুতরাং আমি মনে করি এটি ব্যবহার করা ভাল।
মাইকেল এ।

9
এটি অ্যাপ স্টোর নিরাপদ নয় এবং উত্সাহিত করা উচিত নয় , আপনাকে এই কৌশলগুলি দিয়ে অনুমোদিত বা অনুমোদিত থাকার নিশ্চয়তা দেওয়া হচ্ছে না।
স্বেইনং কোভাল বাক্কেন

31
এটি অনুমোদিত বা সত্যই না তা আসল বিষয় নয়। গুরুত্বপূর্ণ বিষয়টি এটি ভবিষ্যতের ওএস আপডেটগুলিতে আপনার অ্যাপ্লিকেশনটিকে ভেঙে দিতে পারে।
পাব্লস্কো

2
আইওএস with এর সাথে কোনও সমস্যা হচ্ছে না ... নোট থাকা সত্ত্বেও আমি এটিকে চেষ্টা করে দেখলাম এবং এটি ভাল কাজ করছে বলে মনে হচ্ছে এবং অতীতে আমি কোনও সমস্যা ছাড়াই এই পদ্ধতির ব্যবহার করেছি।
WCByrne

6
এটি সর্বদা একটি খারাপ ধারণা ছিল এবং এখন এটি আইওএস 13 এ বিভক্ত: Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug😈
রাইডার

153

এটি সুইফ্ট <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])

সুইফট 4:

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

সুইফট 4.2:

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

IOS8.2 এ আপনার সমাধানটি ব্যবহার করে, কবজির মতো কাজ করে। এখানে নিখুঁত সমাধান। উদ্দেশ্য সি ব্যবহার করে।
অক্ষিত জাভেরি

73

সুইফটে:

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])
}

যদি আপনি কল করার আগে স্থানধারক পাঠ্য সেট না করে থাকেন তবে এটি অ্যাপটি ক্র্যাশ হয়ে যাবে
আপিনহো

এটি সেরা এক, আপনাকে ধন্যবাদ। @apinho এখানে কিছুই ক্রাশ হবে না
মার্কাস

// সুইফ্ট 4 এ যদি স্থানধারক = আপনার টেক্সটফিল্ড.প্লেসোল্ডার let আপনার টেক্সটফিল্ড.্যাট্রিবিউটেডপ্লেসোল্ডার = এনএসএট্রিবিউটেড স্ট্রিং (স্ট্রিং: প্লেসোল্ডার, বৈশিষ্ট্য: [এনএসএট্রিবিউটেড স্ট্রিংকি :.ফোরগ্রাউন্ড কালার: ইউআইকোলোর.ওয়াইট])}
রোনালদো অ্যালবার্টিনি 20

এই কোডটি কার্যকর হওয়ার পরে স্থানধারক পাঠ্যের মানটি পরিবর্তন করা হলে ডিফল্ট স্থানধারীর রঙ ফিরিয়ে আনতে হবে Be
আলেসান্দ্রো ভেন্ড্রুস্কোলো

66

সুইফট 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)
        }
    }
}

সুইফট 5 সংস্করণ

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: [NSAttributedString.Key: UIColor] = [.foregroundColor: newValue]
            self.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string, attributes: attributes)
        }
    }
}

সংকলকটি এটি খুঁজে পেতে পারে না NSAttributedStringKey
মিলান কমিল্যা

আইওএস 13 এ কাজ করে
জলিল

43

কেবলমাত্র iOS6 + এর সাথে নিম্নলিখিত (আলেকজান্ডার ডাব্লু এর মন্তব্যে নির্দেশিত):

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

33

আমি ইতিমধ্যে এই সমস্যার মুখোমুখি হয়েছিল। আমার ক্ষেত্রে নীচের কোডটি সঠিক।

উদ্দেশ্য গ

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

সুইফট 4. এক্স এর জন্য

tf_mobile.setValue(UIColor.white, forKeyPath: "_placeholderLabel.textColor")

আইওএস 13 স্যুইফ্ট কোডের জন্য

tf_mobile.attributedPlaceholder = NSAttributedString(string:"PlaceHolder Text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])

আপনি আইওএস 13 এর জন্য নীচের কোডটিও ব্যবহার করতে পারেন

let iVar = class_getInstanceVariable(UITextField.self, "_placeholderLabel")!
let placeholderLabel = object_getIvar(tf_mobile, iVar) as! UILabel
placeholderLabel.textColor = .red

আশা করি, এটি আপনাকে সাহায্য করতে পারে।


@ আশু এর ফলে আইওএস 13 এর ক্র্যাশ ঘটায় 'ইউআইটিেক্সটফিল্ডের _প্লেসোল্ডারলাবেল আইভার অ্যাক্সেস নিষিদ্ধ। এটি এমন একটি অ্যাপ্লিকেশন বাগ যা এটি বিল্ড হয়ে যাবে এমনকি আমি অ্যাপস্টোরে রাখার কথা বলছি না
মেলাানি

1
আইওএস 13 এটি নিষিদ্ধ ছিল আর এটি আর ব্যবহার করতে পারে না
কিশোর কুমার

আইওএস 13-তে ওজেজেসি কোড পরীক্ষা করা হয় এবং কাজ করে না।
মেহেদিকো

1
@ মেহেডিকো আমি iOS 13-এর উত্তর আপডেট করেছি updated আশা করি এটি আপনাকে সহায়তা করবে।
আশু

আমাকে অনেক দীর্ঘ সময় নিয়েছে তা শিখতে যে আমাকে viewWillAppearবা এই পরিবর্তনটি করতে হয়েছিল viewDidAppearviewDidLoadখুব তাড়াতাড়ি
চার

32

এটির সাহায্যে আমরা আইওএস-এ পাঠ্যক্ষেত্রের স্থানধারক পাঠ্যের রঙ পরিবর্তন করতে পারি

[self.userNameTxt setValue:[UIColor colorWithRed:41.0/255.0 green:91.0/255.0 blue:106.0/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];

1
আইওএস 13 থেকে শুরু করে এটি কাজ করবে না
টেডি

@ টেডি আপনি এখন এটি কিভাবে করলেন? আমার এ নিয়ে সমস্যা হতে শুরু করে।
জলিল

@ জালিল আশা করি আমি এখনও আপনার জন্য সময়মতো রয়েছি। টেক্সটফিল্ড.ট্রিবিউটেডপ্লেসোল্ডার = [[এনএসএট্রিবিউটেড স্ট্রিং বরাদ্দ] initWithString: @ "পাঠ্য" বৈশিষ্ট্য: @ {এনএসফোরগ্রাউন্ড কালারঅ্যাট্রিবিউটনাম: [ইউআইসিওলর রঙ উইথহেক্স স্ট্রিং: @ "ffffff55"]}];
টেডি

18

আপনি কেবল UIAppearanceপদ্ধতিটি ব্যবহার করবেন না কেন :

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

দুর্দান্ত কাজ! পাঠ্যের রঙ প্রভাবিত করে না (কমপক্ষে পাঠ্য বর্ণের সম্পত্তিটির জন্য বিভিন্ন প্রক্সি সহ)
হটজার্ড

18

আপনার স্টোরিবোর্ডেও, কোডের একক লাইন ছাড়াই

এখানে চিত্র বর্ণনা লিখুন


1
তুমি কীভাবে জানলে? আমি মনে করি এটি সেরা পদ্ধতির তবে এটি কীভাবে জানতে পারে? দয়া করে বলুন আমি আইওএস প্রোগ্রামিংয়ে নতুন।
ইয়াওয়ার

2
এটা খুব সার্বজনীন। একবার আপনি জানতে পারবেন যে এটি সর্বত্র এটি ব্যবহার করুন;)
পেট্র সিরিভ

আমি জানি এটির পিছনে কী চলছে তা আমি বুঝতে পারি আমি এটি ব্যবহার করতে যাচ্ছি। তবে আমি বোঝাতে চাইছি "_ placeholderLabel.textColor" এটি পাঠ্যক্ষেত্রের চাইল্ড ভিউ হওয়া উচিত। কোনও নিয়ন্ত্রণ সম্পর্কে এই ধরণের তথ্য দেখার কোনও উপায় আছে কি?
ইয়াওয়ার

2
@ ইয়াওয়ার আপনি এক্সকোডে ভিউ হায়ারার্কি ইন্সপেক্টরটি ব্যবহার করতে পারেন, বা ডিবাগারের মধ্যে ভিউটি অন্তর্নির্ধারণ করতে পারেন।
ডেভিড গ্যানস্টার

ভাল, পাঠ্যক্ষেত্র নির্বিশেষে, আপনি কিপথের জন্য একই 'টাইল / নাম' ব্যবহার করতে পারেন
নৈশত

16

দ্রুত 3.X

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

দ্রুত 5

textField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes: [NSAttributedString.Key.foregroundColor : UIColor.black])

12

আইওএস 6.0 + এর জন্য

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

আশা করি এটা সাহায্য করবে.

দ্রষ্টব্য: প্রাইভেট এপিআইতে অ্যাক্সেস করায় অ্যাপল আপনার অ্যাপ্লিকেশনটিকে (0.01% সম্ভাবনা) প্রত্যাখ্যান করতে পারে। আমি এটি আমার সমস্ত প্রকল্পে দু'বছর থেকেই ব্যবহার করছি, কিন্তু অ্যাপল এটি চাইেনি।


terminating with uncaught exception of type NSExceptionআইওএস 8 এর জন্য একটি ছুড়ে ফেলে
ইয়ার

10

Xamarin.iOS বিকাশকারীদের জন্য, আমি এই দস্তাবেজটি থেকে এটি পেয়েছি https://developer.xamarin.com/api/type/Foundation.NSAttributesString/

textField.AttributedPlaceholder = new NSAttributedString ("Hello, world",new UIStringAttributes () { ForegroundColor =  UIColor.Red });

ধন্যবাদ !! আমি প্রথমে সিটিএসটিরিংঅ্যাট্রিবিউটগুলি ব্যবহার করেছি এবং ইউআইএসটিরিংঅ্যাট্রিবিউটস না এবং এটি বের করতে পারি না। এটি ব্যবহার না করার জন্য সতর্ক থাকুন:new NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
যোহন দহমনি

9

সুইফ্ট সংস্করণ। সম্ভবত এটি কাউকে সাহায্য করবে।

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

6

বিভাগসমূহ কার্যকর রঙ পরিবর্তন জন্য চেক করতে অনুকূলিত করা যেতে পারে।


#import <UIKit/UIKit.h>

@interface UITextField (OPConvenience)

@property (strong, nonatomic) UIColor* placeholderColor;

@end

#import "UITextField+OPConvenience.h"

@implementation UITextField (OPConvenience)

- (void) setPlaceholderColor: (UIColor*) color {
    if (color) {
        NSMutableAttributedString* attrString = [self.attributedPlaceholder mutableCopy];
        [attrString setAttributes: @{NSForegroundColorAttributeName: color} range: NSMakeRange(0,  attrString.length)];
        self.attributedPlaceholder =  attrString;
    }
}

- (UIColor*) placeholderColor {
    return [self.attributedPlaceholder attribute: NSForegroundColorAttributeName atIndex: 0 effectiveRange: NULL];
}

@end

6

উভয় উল্লম্ব এবং অনুভূমিক প্রান্তিককরণ পাশাপাশি iOS7 এ স্থানধারীর রঙ পরিচালনা করতে। অঙ্কনআরেক্ট এবং ড্রআউটপয়েন্টটি এখন আর বর্তমান প্রসঙ্গের ফিলকলার ব্যবহার করে না।

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

এই দুর্দান্ত সমাধানের জন্য ধন্যবাদ - যা পাঠ্যটিকে উল্লম্বভাবে কেন্দ্র করে (কাস্টম ফন্টগুলির সাথে দরকারী)। কেবলমাত্র আমি যুক্ত করব যে এই সমাধানটি আইওএস 6 বা ততোধিক বয়স্কের সাথে সামঞ্জস্যপূর্ণ নয় ([সেলফোল্ডারোল্ডার ড্রইংআরআরেক্ট: রেকট উইথ ফন্ট: সেলফ্যান্ডফন্ট লাইনব্র্যাকমোড: এনএসলাইনব্র্যাকবাই ট্রাইঙ্কিংটিং টেইল অ্যালাইনমেন্ট: সেলফেসটেক্সলাইনমেন্ট];
লাইফজয়

6

আইওএস 6 এবং পরে অফার attributedPlaceholderউপর UITextField। আইওএস 3.2 এবং পরে অফার setAttributes:range:উপরNSMutableAttributedString

আপনি নিম্নলিখিতটি করতে পারেন:

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

সুইফট ৪.১ এর জন্য এই সমাধান

    textName.attributedPlaceholder = NSAttributedString(string: textName.placeholder!, attributes: [NSAttributedStringKey.foregroundColor : UIColor.red])

4

ওভাররাইডিং drawPlaceholderInRect:সঠিক উপায় হবে তবে এটি API (বা ডকুমেন্টেশন) এর বাগের কারণে কাজ করে না।

পদ্ধতিটি কখনই ডাকে না UITextField

কল করা হয়নি এমন ইউআইটিেক্সটফিল্ডে ড্রটেক্সটইনআরেক্টও দেখুন

আপনি ডিজডগের সমাধানটি ব্যবহার করতে পারেন। যেহেতু আমি নিশ্চিত নই যে এটি অ্যাপল পর্যালোচনাটি অতীতের হয়ে গেছে কিনা, তাই আমি একটি পৃথক সমাধান বেছে নিয়েছি: আমার নিজস্ব লেবেল সহ পাঠ্য ক্ষেত্রটি ওভারলে যা স্থানধারক আচরণের অনুকরণ করে।

যদিও এটি কিছুটা অগোছালো। কোডটি দেখতে দেখতে দেখতে (টেক্সটফিল্ডের একটি সাবক্লাসের ভিতরে আমি এটি করছি) নোট:

@implementation PlaceholderChangingTextField

- (void) changePlaceholderColor:(UIColor*)color
{    
    // Need to place the overlay placeholder exactly above the original placeholder
    UILabel *overlayPlaceholderLabel = [[[UILabel alloc] initWithFrame:CGRectMake(self.frame.origin.x + 8, self.frame.origin.y + 4, self.frame.size.width - 16, self.frame.size.height - 8)] autorelease];
    overlayPlaceholderLabel.backgroundColor = [UIColor whiteColor];
    overlayPlaceholderLabel.opaque = YES;
    overlayPlaceholderLabel.text = self.placeholder;
    overlayPlaceholderLabel.textColor = color;
    overlayPlaceholderLabel.font = self.font;
    // Need to add it to the superview, as otherwise we cannot overlay the buildin text label.
    [self.superview addSubview:overlayPlaceholderLabel];
    self.placeholder = nil;
}

আপনার পর্যালোচনা-বান্ধব সমাধান ভাগ করে নেওয়ার বিষয়ে আপনি কেমন অনুভব করবেন?
আদম

আমি আমার ব্যবহৃত সমাধানটি যুক্ত করেছি। আমাকে কিছুটা খনন করতে হয়েছিল, যেমনটি কিছু সময় আগে :)
henning77

আমি এর অনুরূপ কিছু করেছি, তবে আমি কোডটি একটি বিভাগে রেখেছি এবং এটি দৃশ্যমান করতে হবে কিনা তা যাচাই করতে অবশ্যই চ্যাঞ্চ চেকার্সে একটি চেক করা দরকার, যা - (অকার্যকর) ওভারলেপ্লেসোল্ডারভিজিবল: (বিওএল) দৃশ্যমান বিভাগের দ্বিতীয় পদ্ধতি ছিল whether ;
ডেভিড ভ্যান দুগ্তেরেন

3

আইএম এক্সকোডে নতুন এবং আমি একই প্রভাবের আশেপাশে একটি উপায় খুঁজে পেয়েছি।

আমি পছন্দসই ফর্ম্যাট সহ স্থানধারকের জায়গায় একটি ইউয়েবেল রেখেছি এবং এটি লুকিয়ে রেখেছি

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

        case 1:
            lblPassword.hidden=YES;
            break;

        default:
            break;
    }
}

আমি এর চারপাশের কাজকে সম্মত করছি এবং আসল সমাধান নয় তবে এই লিঙ্কটি থেকে প্রভাবটি পেয়েছিল

দ্রষ্টব্য: এখনও আইওএস 7: | এ কাজ করে


3

কভেটের সাথে সুইফট 5

let attributes = [ NSAttributedString.Key.foregroundColor: UIColor.someColor ]
let placeHolderString = NSAttributedString(string: "DON'T_DELETE", attributes: attributes)
txtField.attributedPlaceholder = placeHolderString

আপনি যে Stringসতর্কতা অবলম্বন করে একটি ফাঁকা জায়গা "ON DON'T_DELETE" থাকা উচিত, সেই স্ট্রিং অন্য কোথাও কোডে সেট করা থাকলেও। আপনাকে হেড-স্ক্র্যাচিংয়ের পাঁচ মিনিট বাঁচাতে পারে।


2

আমি iOS7 এবং এর চেয়ে কম উভয়ের পক্ষেই করতে পারি সেরাটি:

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
  return [self textRectForBounds:bounds];
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
  return [self textRectForBounds:bounds];
}

- (CGRect)textRectForBounds:(CGRect)bounds {
  CGRect rect = CGRectInset(bounds, 0, 6); //TODO: can be improved by comparing font size versus bounds.size.height
  return rect;
}

- (void)drawPlaceholderInRect:(CGRect)rect {
  UIColor *color =RGBColor(65, 65, 65);
  if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
    [self.placeholder drawInRect:rect withAttributes:@{NSFontAttributeName:self.font, UITextAttributeTextColor:color}];
  } else {
    [color setFill];
    [self.placeholder drawInRect:rect withFont:self.font];
  }
}

2

মনোোটুচ (জ্যামারিন.আইওএস) ব্যবহারকারীদের জন্য, এখানে অ্যাডামের উত্তর, সি # তে অনুবাদ করা হয়েছে:

public class MyTextBox : UITextField
{
    public override void DrawPlaceholder(RectangleF rect)
    {
        UIColor.FromWhiteAlpha(0.5f, 1f).SetFill();
        new NSString(this.Placeholder).DrawString(rect, Font);
    }
}

গ্রেট। এটি সত্যিই সুস্পষ্ট ছিল না, আপনি সম্ভবত আমাকে কিছু সময় বাঁচিয়েছেন :) আমি আপনার সমাধানটি সম্পাদনা করেছি যদিও, আমি মনে করি Fontযে পাঠ্য ক্ষেত্রের সম্পত্তিটিতে ফন্ট সেটটি ব্যবহার করা ভাল idea
ওল্ফগ্যাং শ্রেরস

1

আমার স্থানধারীর সারিবদ্ধতা রাখা দরকার তাই অ্যাডামের উত্তর আমার পক্ষে যথেষ্ট ছিল না।

এটি সমাধানের জন্য আমি একটি সামান্য প্রকরণ ব্যবহার করেছি যা আমি আশা করি আপনারা কিছু লোককেও সহায়তা করবে:

- (void) drawPlaceholderInRect:(CGRect)rect {
    //search field placeholder color
    UIColor* color = [UIColor whiteColor];

    [color setFill];
    [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
}

UILineBreakModeTailTruncationআইওএস 6 হিসাবে
অবহিত করা হয়েছে

1
[txt_field setValue:ColorFromHEX(@"#525252") forKeyPath:@"_placeholderLabel.textColor"];

এটির একটি সামান্য ইঙ্গিতটি হ'ল আপনি একটি বেসরকারী আইভার (_ স্থানধারক লেবেল) অ্যাক্সেস করছেন এবং অতীতে অ্যাপল এটি করা সম্পর্কে কিছুটা সূক্ষ্ম ছিল। :)
আলেকজান্ডার ডব্লিউ

1

একাধিক রঙ সহ অ্যাট্রিবিউটেড টেক্সটফিল্ড স্থানধারক সেট করার জন্য,

শুধু পাঠ্য নির্দিষ্ট করুন,

  //txtServiceText is your Textfield
 _txtServiceText.placeholder=@"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;

আউটপুট: -

এখানে চিত্র বর্ণনা লিখুন


0

আর একটি বিকল্প যা সাবক্লাসিংয়ের প্রয়োজন নেই - স্থানধারককে খালি ছেড়ে দিন, এবং সম্পাদনা বোতামের উপরে একটি লেবেল রাখুন। আপনি যেমন প্লেসহোল্ডারকে পরিচালনা করবেন ঠিক তেমন লেবেলটি পরিচালনা করুন (একবার ব্যবহারকারী কোনও কিছু ইনপুট সাফ করুন ..)


আমি মনে করি আপনার কাছে একটি পাঠ্যক্ষেত্র থাকলে এটি কার্যকর হবে তবে আপনি যদি আরও বিশ্বব্যাপী এই পরিবর্তনটি করার চেষ্টা করছেন তবে এই সমাধানটি আপনার প্রকল্পে যথেষ্ট পরিমাণে ওভারহেড যুক্ত করবে।
জেমস পার্কার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.