UISearchBar文本字段中的自定义清除button

我试过了:

UITextField *searchtextfield = [searchBar.subviews objectAtIndex:1]; UIButton *cButton = [UIButton buttonWithType:UIButtonTypeCustom]; cButton.frame = CGRectMake(0, 0, 20 , 20); cButton.backgroundColor = [UIColor clearColor]; [cButton setImage:[UIImage imageNamed:@"x-button"] forState:UIControlStateNormal];//your button image. cButton.contentMode = UIViewContentModeScaleToFill; [cButton addTarget:self action:@selector(xButtonPressed) forControlEvents:UIControlEventTouchUpInside];//This is the custom event [searchtextfield setRightView:cButton]; [searchtextfield setRightViewMode:UITextFieldViewModeWhileEditing]; 

但它不能很好地工作…它显示自定义button,但是当你input一些东西,旧的回来…

我怎样才能做到这一点?

如果你想在UISearchBar中设置一个自定义清除button,试试这个:

 [[UISearchBar appearance] setImage:[UIImage imageNamed:@"MyClearButton.png"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

不要忘记为UIControlStateHighlighted设置图像

 [[UISearchBar appearance] setImage:[UIImage imageNamed:@"HighlightedClearButton.png"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; 

你需要以下

 [searchBar setImage:[UIImage imageNamed:@"image1"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; [searchBar setImage:[UIImage imageNamed:@"image2"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

强烈build议从UIControlStateHighlighted开始依次放置string,以防使用相同的图像:image1 = image2 = image。

在iOS7中这是奇怪的,但事实上,UIControlStateNormal和UIControlStateHighlighted的直接顺序不起作用。

您可以在searchBarTextDidBeginEditing上隐藏取消button

 - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { [searchBar setShowsCancelButton:NO animated:YES]; } 

而最惊人的是,你也可以隐藏你清除button

 UITextField *textField=(UITextField*)[[searchBar subviews]objectAtIndex:1]; textField.clearButtonMode=UITextFieldViewModeNever; 

按照我的答案更多信息链接

clearButtonMode设置为UITextFieldViewModeNever并将rightViewModeUITextFieldViewModeAlways

在swift 2.2中,下面的代码为我工作

  [UISearchBar .appearance().setImage(UIImage(named: "search_clear_icon"), forSearchBarIcon: .Clear, state: .Normal)] [UISearchBar .appearance().setImage(UIImage(named: "search_clear_icon"), forSearchBarIcon: .Clear, state: .Highlighted)]