为UIControlStateHighlighted定制UISearchBarIconClear不起作用

我有一个UISearchBar我已经为UiControlStateNormal设置了一个自定义的UISearchBarIconClear。

[mySearchBar setImage:myImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

这部分工作,因为它应该,但不幸的是,当点击清除button,它从我设置的图像更改为原来的默认灰色。

我试图设置UIControlStateHighlighted图像,但显然这是行不通的。

文件实际上说

有效的状态是UIControlStateNormal和UIControlStateDisabled。

如果您不能将其设置为突出显示的状态,那么为默认状态设置自定义button有什么意义? 我错过了什么吗? 任何想法或变通赞赏,谢谢!

今天早些时候遇到同样的问题,这是我真正丑陋的解决方法,我可能不会使用我自己。

 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; } } } 

这个方法有三个问题..

  1. 由于我们正在search栏的子视图内部进行挖掘,因此可能会在操作系统更新的某一天中断。

  2. 这不像UISearchBarIconClear,因为清除图标总是可见的。您可以尝试使用这种方法与其他UITextFieldViewModestesting,我主要不是因为,从我所知道的其他都不会是理想的在这里,出于某种原因或其他。

  3. 也许这只是我自己,但我并不认为在解决这个问题时会引入两个问题,这是一个解决scheme。 🙂

如果任何人有更好的方法来解决这个问题,我也很想听到这个问题。

我遇到了同样的问题,并调整了解决scheme的顺序:

所以,而不是UIControlStateNormal然后UIControlStateHighlighted ,将图像设置为突出显示状态第一

 [searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; [searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

如何使用外观代理?

 [[UIButton appearanceWhenContainedIn:[UITextField class], [UISearchBar class], nil] setImage:myImage forState:UIControlStateHighlighted]; 

我刚刚遇到了同样的问题,因为按下时清除图标重置为默认图标。

这似乎是由于我试图使用相同的UIImage正常和突出显示的状态,切换到不同的图像为突出显示的状态解决了这个问题。