编辑开始时更改UITextField背景

时间:2010-01-03 01:31:35

标签: iphone objective-c first-responder

我想更改UITextField的背景图像,当它成为firstResponder以向用户显示它具有焦点时,类似于CSS中的:active或:focus伪类。

我猜我可能需要以编程方式执行此操作;所以非常感谢任何帮助。

-Giles

4 个答案:

答案 0 :(得分:27)

你也可以使用UITextFieldDelegate方法(恕我直言,比键值观察者更容易维护):

#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属性属于任何类型但UITextBorderStyleRoundedRect(在这种情况下,不考虑background属性)时,此方法才有效。这意味着您可以将上面的代码与UITextBorderStyleBezel,UITextBorderStyleLine和UITextBorderStyleNone一起使用,如borderStyle文档中所述:

  

borderStyle

     

文本字段使用的边框样式。

     

@property(非原子)UITextBorderStyle borderStyle

     

讨论

     

此属性的默认值为   UITextBorderStyleNone。如果是自定义   背景图片设置,此属性   被忽略了。

这是UITextField的背景属性的文档:

  

背景

     

代表的图像   背景外观的文字   启用时的字段。

     

@property(非原子,保留)UIImage   *背景

     

讨论

     

设置时,引用的图像   此属性取代了标准   外观受到控制   borderStyle属性。背景   图像在边框中绘制   图像的矩形部分。图片   你用于文本字段   背景应该能够伸展   适合。

答案 1 :(得分:27)

最简单的方法是恕我直言{@ 1}},并覆盖UITextFieldbecomeFirstResponder以更改文本字段的背景图片。这样,您可以在任何地方使用新的子类,而无需重新实现委托方法来更改背景。

resignFirstResponder

答案 2 :(得分:1)

SWIFT 4

textField.addTarget(self, action: #selector(anyFunction), for: UIControlEvents.editingDidBegin)


@objc func anyFunction() {
    // Add your conde here
}

答案 3 :(得分:0)

您可以尝试观察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
    }
}