Gil*_*sen 11 iphone objective-c first-responder
我想改变UITextField的背景图像,当它成为第一个响应者时,向用户显示它有焦点,类似于CSS中的:active或:focus伪类.
我猜我可能需要以编程方式执行此操作; 所以任何帮助都非常感谢.
-Giles
Zic*_*nic 29
恕我直言的最简洁方式是子类化UITextField和覆盖becomeFirstResponder并resignFirstResponder更改文本字段的背景图像.这样,您可以在任何地方使用新的子类,而无需重新实现委托方法来更改背景.
- (BOOL)becomeFirstResponder {
BOOL outcome = [super becomeFirstResponder];
if (outcome) {
self.background = // selected state image;
}
return outcome;
}
- (BOOL)resignFirstResponder {
BOOL outcome = [super resignFirstResponder];
if (outcome) {
self.background = // normal state image;
}
return outcome;
}
Run Code Online (Sandbox Code Playgroud)
Adr*_*ski 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;
}
Run Code Online (Sandbox Code Playgroud)
这仅适用于UITextField.borderStyle属性属于任何类型但UITextBorderStyleRoundedRect(在这种情况下,不考虑background属性).这意味着您可以将上面的代码与UITextBorderStyleBezel,UITextBorderStyleLine和UITextBorderStyleNone一起使用,如borderStyle文档中所述:
的borderStyle
文本字段使用的边框样式.
@property(非原子)UITextBorderStyle borderStyle
讨论
此属性的默认值为UITextBorderStyleNone.如果设置了自定义背景图像,则忽略此属性.
这是UITextField的background属性的文档:
背景
启用时表示文本字段背景外观的图像.
@property(非原子,保留)UIImage*背景
讨论
设置时,此属性引用的图像将替换borderStyle属性控制的标准外观.在图像的边界矩形部分中绘制背景图像.用于文本字段背景的图像应该能够伸展以适应.