我有一个UISearchBar,我为UiControlStateNormal设置了一个自定义的UISearchBarIconClear.
[mySearchBar setImage:myImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];
这个部分可以正常工作但不幸的是,当点击清除按钮时,它会从我设置的图像变为原始的默认灰色按钮.
我已经尝试为UIControlStateHighlighted设置图像,但显然这不起作用.
documentation实际上说明了
Valid states are UIControlStateNormal and UIControlStateDisabled.
如果您无法将其设置为突出显示状态,那么为默认状态设置自定义按钮的重点是什么?我错过了什么吗?任何想法或变通方法都表示赞赏,谢谢!
解决方法
今天早些时候遇到同样的问题,这是我真正难以理解的解决方法,我可能不会自己使用.
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,我的主要原因是,据我所知,其他人都不会这里理想,出于某种原因或其他原因.
>也许只是我,但我真的不认为在尝试解决问题时引入两个问题的东西是一种解决方案. 原文链接:https://www.f2er.com/iOS/332704.html