Я хотел бы изменить цвет текста заполнителя, который я установил в своих UITextField
элементах управления, чтобы сделать его черным.
Я бы предпочел сделать это без использования обычного текста в качестве заполнителя и необходимости переопределять все методы для имитации поведения заполнителя.
Я считаю, что если я переопределю этот метод:
- (void)drawPlaceholderInRect:(CGRect)rect
тогда я должен быть в состоянии сделать это. Но я не уверен, как получить доступ к фактическому объекту-заполнителю из этого метода.
ios
uitextfield
Адам
источник
источник
attributedPlaceholder
говорит, что использует текстовые атрибуты, за исключением цвета.[[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
Легко и безболезненно, может быть легкой альтернативой для некоторых.
Компания Apple не может предлагать производство, но может отклонить вашу заявку.
источник
_placeholderLabel
является частной собственностью. Это решение может быть отклонено для использования частного API.Вы можете переопределить
drawPlaceholderInRect:(CGRect)rect
как таковой для ручной визуализации текста заполнителя:источник
[self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
, наверное, лучше. Таким образом, вы будете уважатьtextAlignment
собственность. Я добавил это в мой класс SSTextField . Не стесняйтесь использовать в своих проектах.Вы можете изменить текстовый цвет заполнителя на любой другой цвет, используя приведенный ниже код.
источник
Возможно, вы захотите попробовать этот способ, но Apple может предупредить вас о доступе к частному ivar:
ПРИМЕЧАНИЕ.
По словам Мартина Аллеуса, это больше не работает на iOS 7.
источник
Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug
RyЭто работает в Swift <3.0:
Протестировано в iOS 8.2 и iOS 8.3 beta 4.
Свифт 3:
Свифт 4:
Swift 4.2:
источник
В Свифте:
В Swift 4.0:
источник
Swift 3.0 + раскадровка
Чтобы изменить цвет заполнителя в раскадровке, создайте расширение со следующим кодом. (не стесняйтесь обновлять этот код, если вы думаете, он может быть яснее и безопаснее).
Версия Swift 4
Версия Swift 5
источник
NSAttributedStringKey
.Следующее только с iOS6 + (как указано в комментарии Александра W):
источник
Я уже сталкивался с этой проблемой. В моем случае код ниже правильный.
Цель С
Для Swift 4.X
Для iOS 13 Swift Code
Вы также можете использовать приведенный ниже код для iOS 13
Надеюсь, это может помочь вам.
источник
viewWillAppear
илиviewDidAppear
.viewDidLoad
слишком раноПри этом мы можем изменить цвет текста заполнителя текстового поля в iOS
источник
Почему бы вам просто не использовать
UIAppearance
метод:источник
Также в вашей раскадровке, без единой строки кода
источник
в быстрой 3.X
в кратчайшие сроки 5
источник
Для iOS 6.0 +
Надеюсь, поможет.
Примечание. Apple может отклонить (с вероятностью 0,01%) ваше приложение, когда мы обращаемся к частному API. Я использую это во всех своих проектах с двух лет, но Apple не просила об этом.
источник
terminating with uncaught exception of type NSException
для iOS8Для разработчиков Xamarin.iOS я нашел его в этом документе https://developer.xamarin.com/api/type/Foundation.NSAttributedString/
источник
new NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
Свифт версия. Возможно, это кому-то поможет.
источник
Категории FTW. Может быть оптимизирован для проверки эффективного изменения цвета.
источник
Для обработки вертикального и горизонтального выравнивания, а также цвета заполнителя в iOS7. drawInRect и drawAtPoint больше не используют текущий контекст fillColor.
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html
Obj-C,
источник
IOS 6 и более поздние предложения
attributedPlaceholder
оUITextField
. IOS 3.2 и более поздние версии предложенийsetAttributes:range:
оNSMutableAttributedString
.Вы можете сделать следующее:
источник
Это решение для Swift 4.1
источник
Переопределение
drawPlaceholderInRect:
будет правильным способом, но оно не работает из-за ошибки в API (или документации).Метод никогда не вызывается на
UITextField
.Смотрите также drawTextInRect для UITextField, не вызванного
Вы можете использовать решение Digdog. Поскольку я не уверен, пройдет ли это через проверку Apple, я выбрал другое решение: наложите текстовое поле на собственную метку, которая имитирует поведение заполнителя.
Это немного грязно, хотя. Код выглядит следующим образом (обратите внимание, я делаю это внутри подкласса TextField):
источник
Я новичок в xcode, и я нашел способ обойти тот же эффект.
Я поместил uilabel в место заполнителя с желаемым форматом и скрыл его в
Я согласен, что это обходной путь, а не реальное решение, но эффект был таким же, как по этой ссылке
ПРИМЕЧАНИЕ: все еще работает на iOS 7: |
источник
Свифт 5 с плащом.
Предостережение в том, что вы ДОЛЖНЫ ввести непустое значение
String
"DON'T_DELETE", даже если эта строка установлена в другом месте кода. Может сэкономить вам пять минут головокружения.источник
Лучшее, что я могу сделать для iOS7 и меньше, это:
источник
Для тех, кто использует Monotouch (Xamarin.iOS), вот ответ Адама, переведенный на C #:
источник
Font
свойстве текстового поля.Мне нужно было сохранить выравнивание заполнителей, чтобы ответа Адама мне было недостаточно.
Чтобы решить эту проблему, я использовал небольшой вариант, который, надеюсь, поможет и некоторым из вас:
источник
UILineBreakModeTailTruncation
устарела с iOS 6.источник
Для установки заполнителя текстового поля Attributed с несколькими цветами,
Просто укажите текст,
Вывод :-
источник
Еще один вариант, который не требует создания подклассов - оставьте заполнитель пустым и поместите метку поверх кнопки редактирования. Управляйте меткой так же, как вы управляете местозаполнителем (очищая, когда пользователь вводит что-либо ...)
источник