Измените историю UITextField, когда редактирование начнется

Я хотел бы изменить фоновое изображение UITextField, когда это становится firstResponder, чтобы показать пользователю, что это фокусируется, подобное: активный или: псевдоклассы фокуса в CSS.

Я предполагаю, что я, возможно, должен сделать это программно; таким образом, любая справка значительно ценится.

- Giles

11
задан Giles Van Gruisen 3 January 2010 в 01:31
поделиться

2 ответа

Можно также использовать методы 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 *фон

Обсуждение

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

27
ответ дан 3 December 2019 в 00:49
поделиться

Вероятно, можно попробовать наблюдать за изменениями 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
    }
}
0
ответ дан 3 December 2019 в 00:49
поделиться