浏览文档,我找不到任何可以改变UISearchBar颜色的内容。有人知道如何改变吗?没有任何textColor属性:/
THX
答案 0 :(得分:10)
您可以执行以下操作:只需从SearchBar获取searchField属性,然后更改其textColor属性。
UITextField *searchField = [searchbar valueForKey:@"_searchField"];
searchField.textColor = [UIColor redColor]; //You can put any color here.
就是这样!现在你以任何可能的方式操纵textField。
答案 1 :(得分:10)
iOS 8:请参阅https://stackoverflow.com/a/28183058/308315
iOS 6/7:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
答案 2 :(得分:10)
适用于iOS 7及更高版本:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:15]
}];
您也可以删除未使用的属性。
<强>更新即可。由于iOS 9中已弃用appearanceWhenContainedIn
,请参阅下面的Dishant答案:https://stackoverflow.com/a/38893352/2799722
答案 3 :(得分:3)
我怀疑你可以使用this post
中描述的技巧稍微修改那里提供的代码,你是UISearchBar的子类:
@interface SearchBar : UISearchBar {
}
@end
然后在您的实施中:
- (void)layoutSubviews {
UITextField *searchField;
NSUInteger numViews = [self.subviews count];
for(int i = 0; i < numViews; i++) {
if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) {
searchField = [self.subviews objectAtIndex:i];
}
}
if(!(searchField == nil)) {
searchField.textColor = [UIColor redColor];
}
[super layoutSubviews];
}
我没有测试原始帖子的代码或此代码,但看起来它应该有效。 -wkw
答案 4 :(得分:3)
以下是添加此功能的类别:
@implementation UISearchBar (UISearchBar_TextColor)
- (UITextField *)field {
// HACK: This may not work in future iOS versions
for (UIView *subview in self.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
return (UITextField *)subview;
}
}
return nil;
}
- (UIColor *)textColor {
return self.field.textColor;
}
- (void)setTextColor:(UIColor *)color {
self.field.textColor = color;
}
@end
答案 5 :(得分:3)
对于iOS11,我发现这有效:
将searchController
设置为navigationItem
后,搜索文字为黑色黑色。要使它成为白色,我必须这样做:
searchController.searchBar.barStyle = .blackTranslucent
这是唯一对我有用的东西。我的应用程序有一个透明的导航栏,让背景渐变显示出来,我猜测SearchBar具有该外观,因为UISearchBar
的外观设置在很大程度上被忽略,但有一个例外:
UISearchBar.appearance().tintColor = UIColor.red
这使得取消按钮和文本插入光标变为红色。占位符文本为浅灰色。
请注意:UISearchBar.appearance().barStyle = .blackTranslucent
不起作用 - 必须在实例上设置它。这对搜索栏也没有明显影响(它仍然像导航栏一样透明);它只是使搜索文本变白。
答案 6 :(得分:2)
appearanceWhenContainedIn ,因此我们必须在iOS 9及更高版本中使用以下方法。
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
答案 7 :(得分:1)
使用iOS 11,搜索栏有望成为导航栏的一部分,正如您所料,它会添加各种新的功能。&#34;
我认为这是一个错误,但我发现我需要执行以下操作来更改文本(和取消按钮)颜色:
self.searchController.searchBar.barStyle = UISearchBarStyleMinimal;
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
我发现条形式,当保留为&#34;默认为&#34;无论色彩等等都会使文本变黑。当设置为Minimal或Prominent时,文本可见。
答案 8 :(得分:0)
这是一种更清洁的方法:
UITextField *searchField = nil;
for (UIView *v in self.searchBar.subviews)
{
if ([v isKindOfClass:[UITextField class]])
{
searchField = (UITextField *)v;
break;
}
}
if (searchField)
{
searchField.textColor = [UIColor whiteColor];
}
答案 9 :(得分:0)
修改David Foster(@ david-foster)建议的类别,以便在iOS 8上工作。
static UITextField *PBFindTextFieldInView(UIView *view) {
for(UIView *subview in view.subviews) {
if([subview isKindOfClass:UITextField.class]) {
return (UITextField *)subview;
} else {
UITextField* textField = PBFindTextFieldInView(subview);
if(textField) {
return textField;
}
}
}
return nil;
}
@implementation UISearchBar (Appearance)
- (UITextField *)field {
return PBFindTextFieldInView(self);
}
- (UIColor *)textColor {
return self.field.textColor;
}
- (void)setTextColor:(UIColor *)color {
self.field.textColor = color;
}
@end
答案 10 :(得分:0)
在iOS 11的searchController
中设置navigationItem
后,我发现尝试为textColor
内的任何UIAppearance
设置UITextField
UISearchBar
{1}}没有任何影响,但只是调用常规textColor
的自定义外观属性工作得很好。
// Implement a custom appearance property via a UITextField category
@interface UITextField (SearchBarTextColor)
@property (nonatomic, strong) UIColor * textColorWorkaround UI_APPEARANCE_SELECTOR;
@end
@implementation UITextField (SearchBarTextColor)
- (UIColor *)textColorWorkaround {
return self.textColor;
}
- (void)setTextColorWorkaround:(UIColor *)textColor {
self.textColor = textColor;
}
@end
然后使用如下:
UITextField *textFieldProxy = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class]];
textFieldProxy.textColorWorkaround = UIColor.lightGrayColor;
P.S。同样的技巧帮助我为看似无法访问的UIDatePicker
和UIPickerView