为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; } } }
这个方法有三个问题..
-
由于我们正在search栏的子视图内部进行挖掘,因此可能会在操作系统更新的某一天中断。
-
这不像UISearchBarIconClear,因为清除图标总是可见的。您可以尝试使用这种方法与其他UITextFieldViewModestesting,我主要不是因为,从我所知道的其他都不会是理想的在这里,出于某种原因或其他。
-
也许这只是我自己,但我并不认为在解决这个问题时会引入两个问题,这是一个解决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正常和突出显示的状态,切换到不同的图像为突出显示的状态解决了这个问题。