8

是否可以更改搜索栏的文本颜色?我似乎无权访问 UISearchBarTextField 类...

4

4 回答 4

19

首先,您在 中找到子视图UISearchBar,然后UITextField在子视图中找到然后更改颜色

试试这个代码: -

 for(UIView *subView in searchBar.subviews){
            if([subView isKindOfClass:UITextField.class]){
                [(UITextField*)subView setTextColor:[UIColor blueColor]];
            }
        }

适用于 iOS 5 +

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]];
于 2012-05-23T11:34:25.430 回答
11

从 iOS 5 开始,正确的做法是使用外观协议。

例如:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]];
于 2013-08-15T06:07:55.760 回答
2

您可以像这样设置属性,在您的控制器中调用它。

[[UITextField appearanceWhenContainedIn:[self class], nil] setDefaultTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont systemFontOfSize:14]}];

*请注意,这将更改控制器中的所有 UITextField

于 2014-09-04T12:45:19.073 回答
2

UISearchBar自原始帖子以来,原始层次结构发生了变化,UITextField不再是直接子视图。下面的代码对UISearchBar层次结构没有任何假设。

当您不想在整个应用程序中更改搜索栏的文本颜色时(即使用appearanceWhenContainedIn),这也很有用。

/**
 * A recursive method which sets all UITextField text color within a view.
 * Makes no assumptions about the original view's hierarchy.
 */
+(void) setAllTextFieldsWithin:(UIView*)view toColor:(UIColor*)color
{
    for(UIView *subView in view.subviews)
    {
        if([subView isKindOfClass:UITextField.class])
        {
            [(UITextField*)subView setTextColor:color];
        }
        else
        {
            [self setAllTextFieldsWithin:subView toColor:color];
        }
    }
}

用法:

[MyClass setAllTextFieldsWithin:self.mySearchBar toColor:[UIColor blueColor]];
于 2016-07-01T12:57:55.667 回答