【问题标题】:UITextField rightViewMode odd behaviourUITextField rightViewMode 奇怪的行为
【发布时间】:2011-09-13 11:41:34
【问题描述】:

我正在向 UITextField 添加一个自定义清除按钮 (UIButton) 作为 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;

按钮在以下状态下正确显示:

  • 聚焦时显示,没有文字
  • 在专注和打字时显示
  • 没有焦点时隐藏

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

我还没有找到其他人遇到这个问题,所以一直在摸索这个问题。非常感谢任何光线脱落。

【问题讨论】:

  • 只是为了澄清按钮根本没有出现?也许尝试减小图像大小/按钮大小?我有东西没有出现,因为它们太大了。
  • 您是否向 Apple 提交了错误?
  • 别忘了添加“UITextFieldViewModeAlways”属性。

标签: objective-c ios cocoa-touch uikit


【解决方案1】:

这修复了错误:

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

【讨论】:

    【解决方案2】:

    我最近遇到了同样的问题,最终将右视图模式设置为 UITextFieldViewModeAlways,并在需要时手动显示/隐藏该按钮(制作代理委托来监视文本字段状态、设置按钮的可见性并将消息传递给实际委托)。

    【讨论】:

      【解决方案3】:

      解决这个问题的简单代码

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

      【讨论】:

        猜你喜欢
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        相关资源
        最近更新 更多