如何在uisearchbar中始终显示Xbutton(清除按钮)

时间:2013-08-13 11:29:00

标签: ios iphone ios5 uibutton ios5.1

在我的应用程序中,我添加了UISearchBar

我的目的是让UISearch Bar“X按钮”(UITextField中的清除按钮)始终可见。

我尝试使用下面的代码尝试使“X按钮”始终可见。但是,它不起作用。如果我设置tf.clearButtonMode = UITextFieldViewModeNever,则uitextfield中的清除按钮不会显示。我不确定是什么问题?

我真的很感激任何人的帮助。为什么这不起作用?

代码(不工作)

for (UIView* v in searchBar.subviews)
{
    if ( [v isKindOfClass: [UITextField class]] )
    {
        UITextField *tf = (UITextField *)v;
        tf.delegate = self;
        tf.clearButtonMode = UITextFieldViewModeAlways;
        break;
    }
}

目标:

如果文本长度等于0

,我想始终显示清除按钮
  • 即。如果我不输入任何文字。

6 个答案:

答案 0 :(得分:5)

您需要为清除按钮

创建自定义UIButton
UIButton *clearButton = [UIButton buttonWithType:UIButtonTypeCustom];
[clearButton setImage:img forState:UIControlStateNormal];
[clearButton setFrame:frame];
[clearButton addTarget:self action:@selector(clearTextField:) forControlEvents:UIControlEventTouchUpInside];

textField.rightViewMode = UITextFieldViewModeAlways; //can be changed to UITextFieldViewModeNever,    UITextFieldViewModeWhileEditing,   UITextFieldViewModeUnlessEditing
[textField setRightView:clearButton];

答案 1 :(得分:3)

UITextField *searchBarTextField = nil;
    for (UIView *subview in self.searchBar.subviews)
    {
        if ([subview isKindOfClass:[UITextField class]])
        {
            searchBarTextField = (UITextField *)subview;
            searchBarTextField.clearButtonMode = UITextFieldViewModeAlways;
            break;
        }
    }

答案 2 :(得分:3)

这是搜索栏的默认行为。因为如果UITextField为空,则无需按下它。

答案 3 :(得分:0)

你可以在Xib中做到。我正在附上截图。

enter image description here

以编程方式

myUITextField.clearButtonMode = UITextFieldViewModeAlways;

答案 4 :(得分:0)

我试图得到它但不幸的是, UITextField的ClearButton(X)无法自定义。

有一种方法,如果您只需要它来重新签名KeyBoard,那么只需覆盖此方法:

  

请自行清除该字段并调用resignFirstResponder。

-(BOOL)textFieldShouldClear:(UITextField *)textField
{
    textField.text = @"";
    [textField resignFirstResponder];

    return NO;
}

有关它的文档HERE

答案 5 :(得分:0)

这是一个较旧的问题,但我在这里提出了相同的客户要求:“将光标移到searchField中后立即显示clearButton。我们希望能够在任何阶段使用此按钮取消搜索”。
除了添加自定义按钮外,我想出了一个解决方案:

AppleDocs:

  

UITextFieldViewModeAlways如果   文本字段包含文本。

因此,将空格添加为第一个字符将使clearButton处于活动状态。
在将文本输入到searchField中或在使用文本之前的任何其他位置,可以删除前导空格。

-(void)textFieldDidBeginEditing:(UITextField *)textField{
    //adding a whitespace at first start sets the clearButton active
    textField.text = @" ";
}


-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    ...
    NSString *completeNewString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    //remove the dummyWhitespace (here or later in code, as needed)
    self.searchString = [completeNewString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    ...
    return YES;
}