iPhone UITextField - Зміна кольору тексту заповнювача


566

Я хотів би змінити колір тексту-заповнювача, який я встановив у своїх UITextFieldелементах управління, щоб він став чорним.

Я вважаю за краще це робити, не використовуючи звичайний текст як заповнювач і не потребуючи перекриття всіх методів імітації поведінки заповнювача.

Я вважаю, якщо я скасую цей метод:

- (void)drawPlaceholderInRect:(CGRect)rect

тоді я мав би змогу це зробити. Але я не впевнений, як отримати доступ до фактичного об'єкта заповнення із цього методу.

Відповіді:


804

З моменту введення атрибутивних рядків у UIViews в iOS 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
Це добре - але пам’ятайте, що вам потрібно встановити значення заповнювача в IB, перш ніж це спрацює
gheese

4
також варто обговорити це у виклику
respondsToSelector

5
Документи для attributedPlaceholderкажуть, що використовує текстові атрибути, крім кольору.
Метт Конноллі

1
Будь-яка ідея, чому він не працює для атрибута - NSFontAttributeName [[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
dev4u

3
На iOS 7 я отримав цю помилку:[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
i_am_jorf

237

Легка та безболісна, може бути легкою альтернативою для деяких.

_placeholderLabel.textColor

Не пропонується для виробництва, Apple може відхилити ваше подання.


1
Ви використовуєте це у виробництві? Я маю на увазі доступ до приватної власності.
Geri Borbás

11
Можливо, додайте текст до своєї відповіді для швидкого копіювання та вставки. _placeholderLabel.textColor
Philiiiiiipp

47
Не використовуйте цей метод, я використав цей магазин і магазин ITune, відхилив мою заявку.
Asad ali

1
Я думаю, що будь-який метод приватної бібліотеки НІКОЛИ не повинен бути рекомендований як рішення для чого завгодно
Skrew

2
@jungledev _placeholderLabel- приватна власність. Це рішення може бути відхилено для використання приватного API.
Шон Кладек

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майно. Я додав це до свого класу SSTextField . Сміливо використовуйте у своїх проектах.
Сем Соффс

52
Абсолютно НЕ робіть того, що сказав Котег. НІКОЛИ не переосмислюйте методи через категорії. EVER
Джошуа Вайнберг

8
@JoshuaWeinberg Чи є якась конкретна причина вашої суди.
Крішнан

5
@Krishnan реалізація дубліката методу в категорії не підтримується, і ви ніколи не можете бути впевнені, який метод буде викликаний, або якщо обидва будуть викликані, або порядок, у якому вони будуть викликані.
sean woodward

8
В iOS7 ви можете змінити пряму, використовуючи CGRectInset (rect, 0, (rect.size.height - self.font.lineHeight) / 2.0) для вертикального центру тексту.
Брайан S

170

Ви можете змінити кольоровий колір заповнювача на будь-який потрібний вам колір, скориставшись наведеним нижче кодом.

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

6
Найкраща запропонована відповідь. Працює та використовує документовані API.
Іван Хоар

2
Як ви робите цю роботу для UISearchBar? Немає властивості attributedPlaceholder.
gilsaints88

1
Ця відповідь є невірною - згідно з документами, інформація про колір тексту приписаногоПладельця ігнорується developer.apple.com/library/ios/documentation/UIKit/Reference/…
Адлай Холлер

Дякую всім. Сподіваюся, це допомогло. Адлай Холлер, спробуйте брато !!! Ця відповідь була для попередньої версії iOS. Якщо у вас є краща відповідь, ми відкриті для пропозицій.
Манджу

Не працює на iOS8, оскільки немає властивості власників
Ben Clayton,

157

Можливо, ви хочете спробувати так, але Apple може попередити вас про доступ до приватного ivar:

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

ПРИМІТКА.
За словами Мартіна Алея, це більше не працює на iOS 7.


6
Я використовую цей метод у своєму додатку. З оглядом було нормально. Тому я думаю, що це добре використовувати.
Майкл А.

9
Це не безпечно у магазині додатків, і його не слід заохочувати, ви не гарантуєтесь, що отримаєте схвалення та не будете затверджені за допомогою цих методів.
Sveinung Kval Bakken

31
Насправді це не має значення, схвалено це чи ні. Важливо те, що це може зламати ваш додаток у майбутніх оновленнях ОС.
pablasso

2
Не маючи жодних проблем з iOS 7 ... Я спробував це, незважаючи на замітку, і, здається, працює добре, і я раніше використовував такий підхід без проблем.
WCByrne

6
Це завжди була поганою ідеєю, і тепер вона зламана на iOS 13: Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug😈
Райдер Макей

154

Це працює в Swift <3.0:

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

Тестовано в iOS 8.2 та iOS 8.3 beta 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()])
}

У Swift 4.0:

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

Якщо ви не встановили текст заповнювача перед тим, як зателефонувати, він перестане програму
apinho

Це найкращий, дякую. @apinho тут нічого не вийде
Маркус,

// У Swift 4, якщо дозвольте placeholder = yourTextField.placeholder {yourTextField.attributedPlaceholder = NSAttributedString (рядок: заповнювач, атрибути: [NSAttributedStringKey.foregroundColor: UIColor.white])}
Роналду Альбертіні

Остерігайтеся, що зміна тексту тексту заповнення після виконання цього коду поверне стандартний колір заповнення за замовчуванням.
Алессандро Вендрусколо

66

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

введіть тут опис зображення

Версія Swift 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)
        }
    }
}

Версія Swift 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.
Мілан Камілія

Працює в iOS 13
Джаліл

43

Наступне лише з iOS6 + (як зазначено у коментарі Олександра W):

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

33

Я вже стикався з цим питанням. У моєму випадку нижче код правильний.

Мета C

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

Для Swift 4.X

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

Для iOS 13 Swift Code

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

Ви також можете використовувати код нижче для iOS 13

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

Сподіваюся, це може вам допомогти.


@Ashu це спричиняє збій у ios 13 'Доступ до _placeholderLabel ivar UITextField заборонений. Це помилка програми - це навіть не будувати, я не говорю про розміщення в AppStore
Мелані

1
IOS 13 цим обмеженням більше не можна користуватися цим
Kishore Kumar

Код Objc тестується на IOS 13 і не працює.
Мехдіко

1
@Mehdico Я оновив відповідь на iOS 13. Сподіваюся, що це допоможе тобі.
Ашу

Займав мене занадто довго, щоб дізнатися, що мені довелося внести цю зміну в viewWillAppearабо viewDidAppear. viewDidLoadзанадто рано.
Четверте

32

За допомогою цього ми можемо змінити колір тексту заповнення текстового поля в iOS

[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
Починаючи з iOS13, це не спрацює
Тедді

@Teddy, як ти це зробив зараз? У мене почалися проблеми з цим.
Джаліл

@Jalil Я сподіваюся, що я все ще встигаю за тобою. textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString: @ "text" атрибути: @ {NSForegroundColorAttributeName: [UIColor colorWithHexString: @ "ffffff55"]}];
Тедді

18

Чому ви просто не використовуєте UIAppearanceметод:

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

Чудово працює! Колір тексту не впливає (принаймні, з різними проксі для властивості textColor)
HotJard,

18

Також у вашій розкадровці без єдиного рядка коду

введіть тут опис зображення


1
Звідки ти це знаєш? Я вважаю, що це найкращий підхід, але як це можна знати? Скажіть, будь ласка, я новачок у програмі ios.
Явар

2
Це дуже універсально. Як тільки ви дізнаєтесь, що його використовують скрізь;)
Петро Сиров

Я знаю, як тільки я зрозумію, що працює за ним, я збираюся його багато використовувати. Але я маю на увазі "_placeholderLabel.textColor", це повинен бути дочірній вид текстового поля. Чи є спосіб побачити цей тип інформації про елемент управління?
Явар

2
@Yawar Ви можете використовувати інспектор ієрархії перегляду в Xcode або ввести перегляд у відладчику.
Девід Ганстер

хороший, незалежно від текстового поля, ви можете використовувати ту саму "плитку / ім'я" для клавіатури
Naishta

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

Для iOS 6.0 +

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

Сподіваюся, це допомагає.

Примітка: Apple може відхилити ваш додаток (0,01% шансів), коли ми отримуємо доступ до приватного API. Я використовую це у всіх своїх проектах з двох років, але Apple цього не просила.


кидає terminating with uncaught exception of type NSExceptionдля iOS8
Яр

10

Для розробників Xamarin.iOS я знайшов це з цього документа https://developer.xamarin.com/api/type/Foundation.NSAttributedString/

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

Дякую !! Я вперше використовував CTStringAttributes, а не UIStringAttributes, і не міг це зрозуміти. Будьте обережні, щоб не користуватися цим: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

Категорії FTW. Неможливо оптимізувати ефективність зміни кольору.


#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. drawInRect і drawAtPoint більше не використовують поточний контекст fillColor.

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

Obj-C

@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

Дякуємо за це відмінне рішення - яке правильно центрує текст вертикально (корисно зі спеціальними шрифтами). Єдине, що я хотів би додати, це те, що це рішення не сумісне з iOS 6 або старішою (досить просто виправити, потрапивши назад на [self.placeholder drawInRect: rect withFont: self.font lineBreakMode: NSLineBreakByTruncatingTail вирівнювання: self.textAlignment]
lifjoy

6

IOS 6 і пізніші пропозиції attributedPlaceholderпро UITextField. IOS 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;

Не впевнений, що викликає проблему, цей код я назвав у viewdidLoad. новий колір і розмір шрифту з’являються лише після перемальовування. ще щось потрібно робити разом з цим?
Vinayaka Karjigi

це вирішено, я забув встановити шрифт для UITextfield, перш ніж використовувати цей шрифт для тексту-заповнювача. мій поганий
Vinayaka Karjigi

6

Це рішення для Swift 4.1

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

4

Переопределення drawPlaceholderInRect:було б правильним способом, але воно не працює через помилку в API (або документації).

Метод ніколи не викликається UITextField.

Дивись також drawTextInRect на UITextField не називається

Ви можете використовувати розчин digdog. Оскільки я не впевнений, чи не вдасться це переглянути огляд Apple, я вибрав інше рішення: Накладіть текстове поле власною міткою, яка імітує поведінку заповнювача.

Це трохи безладно. Код виглядає приблизно так (Зауважте, я це роблю всередині підкласу TextField):

@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;
}

як би ви ставились до обміну рішенням, сприятливим для огляду?
adam

Я додав використовуваний розчин. Мені довелося трохи копати, як це було деякий час тому :)
henning77

Я зробив щось подібне до цього, але я помістив код у категорію, і мені потрібно було зареєструватися у ifChangeCharacters щодо того, щоб зробити його видимим, що був другим методом у категорії, що називається - (void) overlayPlaceholderVisible: (BOOL) видимий ;
Девід ван Дагтерен

3

Я новачок у кодексі, і я знайшов шлях до того ж ефекту.

Я помістив uilabel на місце тримача місця з потрібним форматом і заховаю його

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

        case 1:
            lblPassword.hidden=YES;
            break;

        default:
            break;
    }
}

Я погоджуюсь, що ця робота є вирішенням, а не реальним рішенням, але ефект був таким же, як це було отримано за цим посиланням

ПРИМІТКА. Все ще працює на iOS 7: |


3

Швидкий 5 З КАВЕТОМ.

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

StringЗастереження полягає в тому, що ви ОБОВ'ЯЗКОВО введете не порожнє місце, де "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

Для тих, хто використовує Monotouch (Xamarin.iOS), ось відповідь Адама, перекладена на C #:

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

Чудово. Це було насправді не очевидно, ви, ймовірно, заощадили мене на деякий час :) Я все ж редагував ваше рішення, оскільки, думаю, краще використовувати набір шрифтів у Fontвластивості текстового поля.
Вольфганг Шреурс

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застаріло, як iOS 6.
Supertecnoboff

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

Трохи натяк на це полягає в тому, що ви маєте доступ до приватного iVar (_placeholderLabel), і в минулому Apple вже трохи непомітна в цьому. :)
Alexander W

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

Ще один варіант, який не вимагає підкласифікації - залиште заповнювач заповнення порожнім і поставте мітку поверх кнопки редагування. Керуйте міткою так само, як ви керуєте заповнювачем (очищення, коли користувач щось введе ..)


Я думаю, що це було б ефективно, якщо у вас є одне текстове поле, але якщо ви намагаєтесь внести цю зміну в більш глобальному масштабі, це рішення додасть значну кількість накладних витрат до вашого проекту.
Джеймс Паркер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.