iOS – 自定义UISearchBar的取消button

在我的iOS5 iPhone应用程序中,我使用以下代码设置search栏的色调:

searchBar.tintColor = UIColorMake(@"#EFEFEF"); 

#efefef的RGB值是(239,239,239)
它的工作正常。 但是当取消button出现时,文本“取消”不可见。 我可以自定义取消button,透明黑白文本吗?
有可能定制?

你可以searchUISearchBar视图,并find取消button,这样做是危险的,因为button可以改变例如,你可以添加这个在你的viewWillAppear

 - (void) viewWillAppear:(BOOL)animated { //show the cancel button in your search bar searchBar.showsCancelButton = YES; //Iterate the searchbar sub views for (UIView *subView in searchBar.subviews) { //Find the button if([subView isKindOfClass:[UIButton class]]) { //Change its properties UIButton *cancelButton = (UIButton *)[sb.subviews lastObject]; cancelButton.titleLabel.text = @"Changed"; } } } 

正如我之前所说,这可能会改变,它是一个黑客这样做,你最好坚持原来的,或创build自己的search栏。

您可以使用外观代理自定义iOS 5上的“取消”button。 包含在UISearchBar时,需要更改UIBarButtonItem外观。 例如,要更改“取消”button的标题字体,您可以使用:

 NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], UITextAttributeTextColor, [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, [UIFont systemFontOfSize:12], UITextAttributeFont, nil]; [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:attributes forState:UIControlStateNormal]; [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:attributes forState:UIControlStateHighlighted]; 

由于iOS5,你可以编辑导航栏,工具栏,Tabbar和一些更多的这个代码…

 NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor darkGrayColor], UITextAttributeTextColor, [UIColor whiteColor], UITextAttributeTextShadowColor, nil]; [[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions]; 

我还没有用search栏进行testing,但它应该类似。

这个方法在IOS7中工作

 for (UIView *view in searchBar.subviews) { for (id subview in view.subviews) { if ( [subview isKindOfClass:[UIButton class]] ) { // customize cancel button UIButton* cancelBtn = (UIButton*)subview; [cancelBtn setEnabled:YES]; break; } } } 

检查这个https://stackoverflow.com/a/18150826/1767686