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.