我将自定义清除按钮(UIButton)添加到UITextField作为rightView,但是我发现viewMode上有一些奇怪的行为。尽管设置了视图模式,但它似乎不像普通的清除按钮那样显示。示例代码如下:
UITextField *f = [[[UITextField alloc] init] autorelease];
f.frame = CGRectMake(0, 0, 300, 44);
f.backgroundColor = [UIColor clearColor];
f.textColor = [UIColor whiteColor];
f.clearButtonMode = UITextFieldViewModeNever;
UIImage *image = [UIImage imageNamed:@"Image.png"];
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
b.frame = CGRectMake(0, 0, image.size.width, image.size.height);
[b setImage:image forState:UIControlStateNormal];
f.rightView = b;
f.rightViewMode = UITextFieldViewModeWhileEditing;
按钮在以下状态下正确显示:
但是,如果文本字段已经有内容,并且您将焦点切换到它,则不会显示清除按钮。要让它再次显示,您必须删除所有文本,并来回切换焦点。
我没有找到其他人遇到这个问题,所以一直在这个问题上摸不着头脑。任何光线都非常受欢迎。
答案 0 :(得分:8)
这解决了错误:
- (BOOL)becomeFirstResponder
{
BOOL ret = YES ;
ret = [super becomeFirstResponder] ;
if( ret && ( _setupClearButtonMode == UITextFieldViewModeWhileEditing ) )
self.rightViewMode = UITextFieldViewModeAlways ;
return ret ;
}
- (BOOL)resignFirstResponder
{
BOOL ret = YES ;
ret = [super resignFirstResponder] ;
if( ret && ( _setupClearButtonMode == UITextFieldViewModeWhileEditing ) )
self.rightViewMode = UITextFieldViewModeWhileEditing ;
return ret ;
}
在UITextField的子类中 在init上设置var _setupClearButtonMode。
答案 1 :(得分:1)
我最近遇到了同样的问题并最终设置了右视图模式到UITextFieldViewModeAlways并在需要时手动显示/隐藏该按钮(使代理委托监视文本字段状态,设置按钮的可见性并将消息传递给实际委托)。
答案 2 :(得分:1)
解决此问题的简单代码
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
textField.rightViewMode=UITextFieldViewModeAlways;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
textField.rightViewMode=UITextFieldViewModeNever;
return YES;
}