的UISearchBar文本颜色(UISearchBar text color)

2019-08-04 23:42发布

浏览文档和我找不到任何改变的UISearchBar的颜色。 是否有人知道如何去改变它? 没有任何textColor属性:/

谢谢

Answer 1:

你可以做到以下几点:刚拿到从搜索栏的searchField属性,然后改变其textColor属性。

UITextField *searchField = [searchbar valueForKey:@"_searchField"];
searchField.textColor = [UIColor redColor]; //You can put any color here.

而已! 现在,你操纵任何可能的方式文本框。



Answer 2:

iOS的8:见https://stackoverflow.com/a/28183058/308315

的iOS 6/7:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];


Answer 3:

适用于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



Answer 4:

我怀疑你可以用描述的技术这个帖子

修改稍微呈现那里的代码,你的子类的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



Answer 5:

下面是添加此功能类别:

@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


Answer 6:

对于iOS11,我发现这工作:

设置后searchControllernavigationItem ,搜索文本是黑的黑色。 为了让白,我不得不这样做:

searchController.searchBar.barStyle = .blackTranslucent

这只是为我工作的事情。 我的应用程序有一个透明的导航栏,让背景渐变显示,并且我猜搜索栏上的外观,因为我对外观设置需要UISearchBar在很大程度上有一个例外忽略:

UISearchBar.appearance().tintColor = UIColor.red

这使取消按钮和文本插入光标红色。 占位符文本为浅灰色。

需要注意的是: UISearchBar.appearance().barStyle = .blackTranslucent没有工作-它必须在实例中设置。 这也有搜索栏上没有明显的影响(它仍然像透明导航栏); 它只是做搜索文本白色。



Answer 7:

appearanceWhenContainedIn已弃用在IOS 9,所以我们有以下方法使用于iOS 9及以上。

[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
 setTintColor:[UIColor whiteColor]];


Answer 8:

随着iOS的11搜索栏有望成为导航栏,正如你所料,增加了各种新的组成部分“的特点。”

我认为这是一个错误,但我发现,我需要做以下更改文本(和取消按钮)颜色:

self.searchController.searchBar.barStyle = UISearchBarStyleMinimal;
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
     setTintColor:[UIColor whiteColor]];

我发现,酒吧风格,离开时为“默认”,将使文本黑色不管着色颜色等。当设置为最小或突出的文字是可见的。



Answer 9:

这里有一个更简洁的方法:

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];
}


Answer 10:

用改进大卫·福斯特(@戴维·福斯特)建议在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


Answer 11:

设置后searchControllernavigationItem为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相同的技巧帮助我的颜色看似难以接近标签UIDatePickerUIPickerView



文章来源: UISearchBar text color