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.