在我的应用程序中,我添加了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
,我想始终显示清除按钮答案 0 :(得分:5)
您需要为清除按钮
创建自定义UIButtonUIButton *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中做到。我正在附上截图。
以编程方式
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;
}