7

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

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

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

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

代码(不工作)

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

目标:

如果文本长度等于 0,我想始终显示清除按钮

  • 即,如果我不输入任何文本。
4

5 回答 5

4
UITextField *searchBarTextField = nil;
    for (UIView *subview in self.searchBar.subviews)
    {
        if ([subview isKindOfClass:[UITextField class]])
        {
            searchBarTextField = (UITextField *)subview;
            searchBarTextField.clearButtonMode = UITextFieldViewModeAlways;
            break;
        }
    }
于 2013-08-13T11:46:21.163 回答
3

这是搜索栏的默认行为。因为如果它UITextField是空白的,那么就没有必要按下它。

于 2013-08-13T11:51:28.200 回答
1

你可以在 Xib 中做到这一点。我附上截图。

在此处输入图像描述

并以编程方式

myUITextField.clearButtonMode = UITextFieldViewModeAlways;
于 2013-08-13T11:45:20.020 回答
0

I tried to get it but unfortunately , There is no Way of Customising with the ClearButton(X) of UITextField .

There is a way that If You only need it to get resign the KeyBoard , Then just overriding this method :

Just clear the field yourself and call resignFirstResponder .

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

    return NO;
}

Documentation about it HERE

于 2013-08-13T12:12:47.470 回答
0

这是一个较老的问题,但我带着同样的客户要求来到这里:“只要光标位于 searchField 中,就显示 clearButton。我们希望能够在任何阶段使用此按钮取消搜索”。
除了添加自定义按钮之外,我还想出了一个解决方案:

苹果文档:

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;
}
于 2019-03-06T08:19:57.287 回答