今天早些时候遇到了同样的问题,这是我自己可能不会使用的非常丑陋的解决方法。
for(UIView *subView in searchBar.subviews) {
if([subView isKindOfClass: [UITextField class]]){
UITextField *searchField = (UITextField *)subView;
CGFloat myWidth = 26.0f;
CGFloat myHeight = 30.0f;
UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)];
[myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateNormal];
[myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateHighlighted];
[myButton addTarget:self action:@selector(clearsearchbar) forControlEvents:UIControlEventTouchUpInside];
searchField.rightView = myButton;
searchField.rightViewMode = UITextFieldViewModeAlways;
searchField.clearButtonMode = UITextFieldViewModeNever;
}
}
进而..
- (void)clearsearchbar {
for(UIView *subView in searchBar.subviews) {
if([subView isKindOfClass: [UITextField class]]){
UITextField *searchField = (UITextField *)subView;
searchField.text = nil;
}
}
}
这种方法的三个问题..
由于我们在搜索栏的子视图中进行挖掘,因此有一天可能会因操作系统更新而中断。
这与 UISearchBarIconClear 的行为不完全一样,因为清除图标将始终可见。您可以尝试使用这种方法与其他 UITextFieldViewModes 进行测试,我没有这样做的主要原因是,据我所知,其他的都不是理想的在这里,出于某种原因。
也许只有我一个人,但我真的不认为在试图解决一个问题时引入两个问题的东西是一个解决方案。:-)
如果有人有更好的方法来解决这个问题,我也很想听听。