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
Вы используете это в производстве? Я имею в виду доступ к частной собственности.
Джери Борбас

11
Возможно, добавьте текст в ответ для быстрого копирования и вставки. _placeholderLabel.textColor
Philiiiiiipp

47
Не используйте этот метод, я использовал это и itune store, отклонил мое приложение.
Асад Али

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
Joshua Weinberg

8
@JoshuaWeinberg Есть ли какая-то конкретная причина вашего предложения.
Кришнан

5
@Krishnan, реализующий дублирующий метод в категории, не поддерживается, и вы никогда не можете быть уверены, какой метод будет вызван, или будут вызваны оба метода, или порядок, в котором они будут вызваны.
Шон Вудворд

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

171

Вы можете изменить текстовый цвет заполнителя на любой другой цвет, используя приведенный ниже код.

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

6
Лучший ответ предложил. Работает и использует документированные API.
Ян Хоар

2
Как вы делаете эту работу для UISearchBar? Свойство attribuPlaceholder отсутствует.
gilsaints88

1
Этот ответ не верен - в соответствии с документами информация о цвете текста attribuPlaceholder игнорируется developer.apple.com/library/ios/documentation/UIKit/Reference/…
Adlai Holler

Спасибо всем. Надеюсь, это помогло. Адлай Холлер, попробуй, братан !!! Этот ответ был для предыдущей версии iOS. Если у вас есть лучший ответ, мы открыты для предложений.
Манджу

Не работает на iOS8, так как там нет свойства attribuPlaceholder
Бен Клэйтон,

157

Возможно, вы захотите попробовать этот способ, но Apple может предупредить вас о доступе к частному ivar:

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

ПРИМЕЧАНИЕ.
По словам Мартина Аллеуса, это больше не работает на iOS 7.


6
Я использую этот метод в своем приложении. Обзор был в порядке. Так что я думаю, что это нормально.
Майкл А.

9
Это не безопасно для магазина приложений и не должно поощряться, вам не гарантировано одобрение или соблюдение этих методов.
Свейнунг Кваль Баккен

31
Не должно иметь значения, одобрено это или нет. Важно то, что это может сломать ваше приложение в будущих обновлениях ОС.
Паблассо

2
У меня не было проблем с iOS 7 ... Я попробовал, несмотря на заметку, и она, кажется, работает нормально, и я использовал этот подход в прошлом без проблем.
WCByrne

6
Это всегда была плохая идея, и теперь она не работает на iOS 13: Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bugRy
Райдер Маккей,

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

Swift 4.2:

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

Использование вашего решения на iOS8.2 работает как шарм. Идеальное решение здесь. Использование в цели C также.
Акшит Завери

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, если let placeholder = yourTextField.placeholder {yourTextField.attributedPlaceholder = NSAttributedString (string: placeholder, attribute: [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
Jalil

43

Следующее только с iOS6 + (как указано в комментарии Александра W):

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

33

Я уже сталкивался с этой проблемой. В моем случае код ниже правильный.

Цель С

[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

Надеюсь, это может помочь вам.


@ Ашу это приводит к сбою в ios 13 'Доступ к _placeholderLabel ivar UITextField запрещен. Это ошибка приложения, это даже не сборка. Я не говорю о размещении в AppStore
Мелани,

1
IOS 13, это было ограничено, больше не могу использовать это
Кишор Кумар

Код objc протестирован на IOS 13 и не работает.
Mehdico

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 это не сработает
Тедди

@ Тедди, как ты это сделал сейчас? У меня начались проблемы с этим.
Джалил

@ Джалил Надеюсь, я все еще нахожусь для тебя. textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString: @ атрибуты "text": @ {NSForegroundColorAttributeName: [UIColor colorWithHexString: @ "ffffff55"]}];
Тедди

18

Почему бы вам просто не использовать UIAppearanceметод:

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

Работает отлично! Цвет текста не
изменяется

18

Также в вашей раскадровке, без единой строки кода

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


1
Откуда ты это знаешь? Я думаю, что это лучший подход, но как об этом узнать? Пожалуйста, скажите, что я новичок в программировании на ios.
Явар

2
Это очень универсально. Как только вы узнаете, используйте его повсюду;)
Петр Сыров

Я знаю, как только я пойму, что за этим стоит, я буду часто этим пользоваться. Но я имею в виду "_placeholderLabel.textColor", это должно быть дочерним представлением текстового поля. Есть ли способ увидеть этот тип информации об элементе управления?
Явар

2
@Yawar Вы можете использовать инспектор иерархии представления в XCode, или исследовать представление в отладчике.
Дэвид Ганстер

хороший, независимо от текстового поля, вы можете использовать одну и ту же «плитку / имя» для keypath
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

Спасибо за это отличное решение, которое правильно центрирует текст по вертикали (полезно с пользовательскими шрифтами). Единственное , что я хотел бы добавить , что это решение не совместимо с прошивкой 6 и старше (достаточно легко исправить, падая спиной [self.placeholder drawInRect: Прямоугольник 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. новый цвет и размер шрифта появляется только после перерисовки. что-нибудь еще должно быть сделано вместе с этим?
Винаяка Карджиги

это было решено, я забыл установить шрифт для UITextfield, прежде чем использовать этот шрифт для текста заполнителя. мой плохой
Винаяка Карджиги

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

как бы вы поделились своим решением, дружественным к обзору?
Адам

Я добавил решение, которое использовал. Мне пришлось немного покопаться, как это было некоторое время назад :)
henning77

Я сделал что-то похожее на это, но я поместил код в категорию, и мне нужно было проверить в mustChangeCharacters необходимость сделать его видимым, что было вторым методом в категории - (void) overlayPlaceholderVisible: (BOOL) visible ;
Дэвид ван Дугтерен

3

Я новичок в xcode, и я нашел способ обойти тот же эффект.

Я поместил 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 немного привыкла к этому. :)
Александр W

1

Для установки заполнителя текстового поля Attributed с несколькими цветами,

Просто укажите текст,

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