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
并将rightViewMode
为UITextFieldViewModeAlways
在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)]