UITextField rightViewMode奇怪的行为

我添加一个自定义清除button(UIButton)作为rightView的UITextField,但是我发现viewMode有一些奇怪的行为。 尽pipe设置了视图模式,但它并不像普通的清除button那样显示。 示例代码如下:

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; 

button在以下状态下正确显示:

  • 显示虽然集中,没有文字
  • 显示,而专注和打字
  • 当没有焦点时隐藏

但是,如果文本字段已经有内容,并且您将焦点切换到该项,则清除button不会显示。 要让它再次显示,您必须删除所有文本,并来回切换焦点。

我还没有发现任何人有这个问题,所以一直在这个问题上挠头。 任何灯光非常赞赏。

这解决了这个错误:

 - (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。

我最近遇到了同样的问题,并最终设置右视图模式为UITextFieldViewModeAlways和手动显示/隐藏该button时(需要监测文本字段状态,设置button的可见性和设置button的可见性和实际委托的代理委托)。

简单的代码来解决这个问题

 - (void)textFieldDidBeginEditing:(UITextField *)textField { textField.rightViewMode=UITextFieldViewModeAlways; } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { textField.rightViewMode=UITextFieldViewModeNever; return YES; }