浏览文档和我找不到任何改变的UISearchBar的颜色。 是否有人知道如何去改变它? 没有任何textColor属性:/
谢谢
浏览文档和我找不到任何改变的UISearchBar的颜色。 是否有人知道如何去改变它? 没有任何textColor属性:/
谢谢
你可以做到以下几点:刚拿到从搜索栏的searchField属性,然后改变其textColor属性。
UITextField *searchField = [searchbar valueForKey:@"_searchField"];
searchField.textColor = [UIColor redColor]; //You can put any color here.
而已! 现在,你操纵任何可能的方式文本框。
iOS的8:见https://stackoverflow.com/a/28183058/308315
的iOS 6/7:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
适用于iOS 7及更高版本:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:15]
}];
您可以删除未使用的属性也是如此。
UPDATE。 由于appearanceWhenContainedIn
在iOS的9过时,请参见下面的Dishant的回答是: https://stackoverflow.com/a/38893352/2799722
我怀疑你可以用描述的技术这个帖子
修改稍微呈现那里的代码,你的子类的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
下面是添加此功能类别:
@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
对于iOS11,我发现这工作:
设置后searchController
到navigationItem
,搜索文本是黑的黑色。 为了让白,我不得不这样做:
searchController.searchBar.barStyle = .blackTranslucent
这只是为我工作的事情。 我的应用程序有一个透明的导航栏,让背景渐变显示,并且我猜搜索栏上的外观,因为我对外观设置需要UISearchBar
在很大程度上有一个例外忽略:
UISearchBar.appearance().tintColor = UIColor.red
这使取消按钮和文本插入光标红色。 占位符文本为浅灰色。
需要注意的是: UISearchBar.appearance().barStyle = .blackTranslucent
没有工作-它必须在实例中设置。 这也有搜索栏上没有明显的影响(它仍然像透明导航栏); 它只是做搜索文本白色。
appearanceWhenContainedIn已弃用在IOS 9,所以我们有以下方法使用于iOS 9及以上。
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
随着iOS的11搜索栏有望成为导航栏,正如你所料,增加了各种新的组成部分“的特点。”
我认为这是一个错误,但我发现,我需要做以下更改文本(和取消按钮)颜色:
self.searchController.searchBar.barStyle = UISearchBarStyleMinimal;
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
我发现,酒吧风格,离开时为“默认”,将使文本黑色不管着色颜色等。当设置为最小或突出的文字是可见的。
这里有一个更简洁的方法:
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];
}
用改进大卫·福斯特(@戴维·福斯特)建议在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
设置后searchController
在navigationItem
为iOS 11,我发现,在尝试将textColor
通过UIAppearance
任何UITextField
一中UISearchBar
没有影响,但简单地称为普通的自定义外观属性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;
PS相同的技巧帮助我的颜色看似难以接近标签UIDatePicker
和UIPickerView