Я хотел бы изменить фоновое изображение UITextField, когда это становится firstResponder, чтобы показать пользователю, что это фокусируется, подобное: активный или: псевдоклассы фокуса в CSS.
Я предполагаю, что я, возможно, должен сделать это программно; таким образом, любая справка значительно ценится.
- Giles
Можно также использовать методы UITextFieldDelegate (IMHO, проще в обслуживании, чем наблюдатели за значением ключа):
#pragma mark -
#pragma mark UITextFieldDelegate methods
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
_field.background = [UIImage imageNamed:@"focus.png"];
return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
_field.background = [UIImage imageNamed:@"nofocus.png"];
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Это работает только в том случае, если свойство UITextField.borderStyle имеет любой тип, но UITextBorderStyleRoundRect (в этом случае фоновое свойство не учитывается). Это означает, что можно использовать приведенный выше код с UITextBorderStyleBezel, UITextBorderStyleLine и UITextBorderStyleNone, как описано в документации BorderStyle:
borderStyle
Стиль границы, используемый текстовым полем.
@property(nonatomic) UITextBorderStyle borderStyle
Discussion
Значением по умолчанию для данного свойства является UITextBorderStyleNone. Если обычай фоновое изображение установлено, это свойство игнорируется.
Это документация по свойству фона UITextField:
background
The image that represents the фоновый рисунок текста поле, когда оно включено.
@property(nonatomic, retain) UIImage *фон
Обсуждение
После установки, изображение, на которое ссылаются это свойство заменяет стандартный внешний вид контролируется границаСтиль собственности. Справочная информация изображения нарисованы на границе прямоугольная часть изображения. Изображения используемый для текстового поля задний план должен быть в состоянии растянуться по размеру.
Вероятно, можно попробовать наблюдать за изменениями isFirstResponder. и изменением фона в методе уведомления. Что-то вроде:
[textField addObserver:theObserver forKeyPath:@"isFirstResponder" options:0 context:nil];
Затем в наблюдателе:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if(object == textField && [keyPath isEqual:@"isFirstResponder"]) {
//fiddle with object here
}
}