Цвет фона iPhone UITextField

Я не могу контролировать цвет фона UITextField с помощью borderStyle= UITextBorderStyleRoundedRect. С этим стилем границы свойство backgroundColor, по-видимому, управляет очень узкой линией вдоль внутреннего края закругленного прямоугольника. Остальная часть поля остается белой.

Однако, если для параметра borderStyle установлено значение *************=UITextBorderStyleBezel, тогда весь фон UITextField управляется свойством backgroundColor.

Это функция? Есть ли способ управлять backgroundColor a UITextField с помощью borderStyle=UITextBorderStyleRoundedRect?

7 ответов

Чтобы изменить цвет фона в UITextField, вам сначала нужно использовать другой стиль текстового поля для "закругленного" стиля (например, стиль "без границ" ) либо в Interface Builder, либо программно.

Затем вы можете легко изменить цвет фона с помощью

textField.backgroundColor = backgroundColor;

где textField - ваш UITextField, а backgroundColor - UIColor.

В качестве дополнительной подсказки - если вы хотите восстановить внешний вид закругленных углов, вам сначала нужно

#import

а затем установите

textField.layer.cornerRadius=8.0f;
textField.layer.masksToBounds=YES

для этой функции работать


В других ответах нет теней на UITextField с закругленным прямоугольным стилем. Попробовав множество опций, я, наконец, просто разместил UIView над UITextField, с идентичной рамкой и маской с автоматическим изменением размера, установите альфа-значение в 0.3 и установите фон в синий цвет. Затем я использовал фрагмент из ответа Питера Джонсона, чтобы скопировать округленные края с цветного наложения. Кроме того, снимите флажок "Взаимодействие с пользователем включен" в IB, чтобы позволить сенсорным событиям каскадироваться до UITextField под ним. Выглядит отлично.

Побочный эффект: ваш текст также будет раскрашен (не имеет значения, если он черный)

#import <quartzcore quartzcore.h="">
colorizeOverlayView.layer.cornerRadius = 6.0f;
colorizeOverlayView.layer.masksToBounds = YES;
</quartzcore>


Это намного проще, чем мы все думали.

При настройке backgroundColor с использованием colorWithRed: зеленый: синий: цвета должны быть плавающими и должны быть частью 1. Например:

[myTextField setBackgroundColor:[UIColor colorWithRed:255.0f/255.0f green:110.0f/255.0f blue:110.0f/255.0f alpha:1];

Все стили TextField работают, когда вы это делаете.

Также смотрите: цвет фона не работает должным образом


Дамп иерархии представлений показывает, что UITextField имеет одно подобие типа UITextFieldRoundedRectBackgroundView, которое, в свою очередь, имеет 12 UIImageView s.

более старая статья от Erica Sadun показывает дополнительный UILabel, который Apple явно удалил в более поздних версиях SDK.

Скручивание с помощью UIImageView не сильно меняется.

Итак, ответ таков: возможно, нет способа изменить цвет фона.


Ответ Джейкоба был лучшим ответом здесь, поскольку он позволяет сохранять тени под текстовыми полями RoundedRect, поэтому +1 для Jacob!

Чтобы подробно остановиться на его решении, вам нужно сделать следующее:

UIView *textFieldShadeView=[[UIView alloc] init];
[textFieldShadeView setFrame:myTextFiled.frame];
textFieldShadeView.layer.cornerRadius=8.0f;
textFieldShadeView.layer.masksToBounds=YES;
textFieldShadeView.backgroundColor=[UIColor blueColor];
textFieldShadeView.alpha=0.3;
textFieldShadeView.userInteractionEnabled=NO;
[self.view addSubview:textFieldShadeView];
[textFieldShadeView release];

Где myTextFiled - это округленное прямоугольное текстовое поле, которое вы пытаетесь изменить цвет фона. Сделайте выше, и вы получите синеватое текстовое поле Иакова вместе с соответствующими тенями.


...
textField.opaque = YES;
textField.backgroundColor=[UIColor blueColor];
textField.layer.cornerRadius=8.0f;
textField.layer.masksToBounds=YES


Вы можете сделать это:

textField.backgroundColor = [UIColor whiteColor];

В этом случае я делаю это с белым цветом, но вы можете сделать это с другим цветом для uiColor.

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

licensed under cc by-sa 3.0 with attribution.