在我的 iOS5 iPhone 应用程序中,我使用以下代码设置搜索栏的色调:
searchBar.tintColor = UIColorMake(@"#EFEFEF");
#efefef 的 RGB 值为 (239,239,239)
它工作正常。但是当取消按钮出现时,文本“取消”是不可见的。我可以只自定义带有透明黑白文本的取消按钮吗?
可以定制吗?
在我的 iOS5 iPhone 应用程序中,我使用以下代码设置搜索栏的色调:
searchBar.tintColor = UIColorMake(@"#EFEFEF");
#efefef 的 RGB 值为 (239,239,239)
它工作正常。但是当取消按钮出现时,文本“取消”是不可见的。我可以只自定义带有透明黑白文本的取消按钮吗?
可以定制吗?
您可以使用外观代理自定义 iOS 5 上的取消按钮。您需要更改UIBarButtonItem
包含在 中时的外观UISearchBar
。例如,要更改取消按钮的标题字体,您可以使用:
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];
您可以搜索UISearchBar
subViews 并找到取消按钮,这样做很危险,因为按钮可能会更改 例如,您可以将其添加到您的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";
}
}
}
正如我之前所说,这可能会改变,这样做是一种黑客行为,你最好坚持原来的,或者创建自己的搜索栏。
从 iOS5 开始,您可以使用此代码编辑导航栏、工具栏、标签栏等...
NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor darkGrayColor],
UITextAttributeTextColor,
[UIColor whiteColor],
UITextAttributeTextShadowColor, nil];
[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];
我没有用搜索栏测试过它,但它应该工作类似。
此方法适用于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;
}
}
}