在不更改tintColor的情况下更改UISearchBar上的光标颜色

Ash*_*had 39 uisearchbar tintcolor ios7

我希望我的searchBar的色调颜色为白色(意味着取消按钮为白色).当着色颜色为白色时,光标不可见.有没有办法分别设置光标颜色?

McF*_*den 64

将您的色调颜色设置为您想要取消按钮的颜色,然后使用UIAppearance协议将文本字段上的色调颜色更改为您希望光标的颜色.例如:

[self.searchBar setTintColor:[UIColor whiteColor]];                
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor darkGrayColor]];
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么,通过这个代码(第二行)在下一个模态场景中也改变了barButton的色调.所以我在下面使用了@ Felipe的答案. (2认同)

ian*_*ker 13

如果你喜欢斯威夫特的功能性但令人讨厌的单行,那么我就把Benjamin的循环归结为:

searchController.searchBar.tintColor = UIColor.whiteColor()

searchController.searchBar.subviews[0].subviews.flatMap(){ $0 as? UITextField }.first?.tintColor = UIColor.blueColor()
Run Code Online (Sandbox Code Playgroud)


Fan*_*ing 11

Swift 3.0和4版本

searchController.searchBar.tintColor = .white        
UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).tintColor = .black
Run Code Online (Sandbox Code Playgroud)

请注意,searchBar不能是可选的.


Jos*_*art 8

Swift 5 中最简单的:

    UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).tintColor = .black
Run Code Online (Sandbox Code Playgroud)


小智 6

使用for-where语法的Compact Swift 2.0解决方案(无需中断循环):

// Make SearchBar's tint color white to get white cancel button.
searchBar.tintColor = UIColor.white()

// Loop into it's subviews and find TextField, change tint color to something else.
for subView in searchBar.subviews[0].subviews where subView.isKindOfClass(UITextField) {
        subView.tintColor = UIColor.darkTextColor()
}
Run Code Online (Sandbox Code Playgroud)


Rom*_*kin 5

searchBar.tintColor = [UIColor whiteColor];
searchBar.backgroundColor = [UIColor clearColor];
for ( UIView *v in [searchBar.subviews.firstObject subviews] )
{
    if ( YES == [v isKindOfClass:[UITextField class]] )
    {
        [((UITextField*)v) setTintColor:[UIColor blueColor]];
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Eri*_*ins 5

这似乎也对我迅速起作用。

    searchController.searchBar.tintColor = UIColor.whiteColor()
    UITextField.appearanceWhenContainedInInstancesOfClasses([searchController.searchBar.dynamicType]).tintColor = UIColor.blackColor()
Run Code Online (Sandbox Code Playgroud)