UISearchBar cancel button color? UISearchBar cancel button color? ios ios

UISearchBar cancel button color?


I used some thing like this and worked with me:

[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor blackColor]];

it changed the cancel button color to black.

Update for iOS 9.0, the method appearanceWhenContainedIn is deprecated, use appearanceWhenContainedInInstancesOfClasses instead:

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

And in Swift 3:

UIBarButtonItem.appearance(whenContainedInInstancesOf:[UISearchBar.self]).tintColor = UIColor.black


The problem with your solution is that the code is assuming that the objectAtIndex:3 is the cancel button. Not only does this generate a compiler warning, but also if you are displaying the Cancel button programmatically (for example using [searchBar setShowsCancelButton:YES], you risk crashing the application.

A simpler solution is to set the style of the whole search bar in ViewDidLoad(), using:

searchBar.tintColor = [UIColor colorWithWhite:0.3 alpha:1.0];

this overrides the style set in the Interface Builder BUT also changes the colour of the Cancel button to be same colour as the whole bar (although it doesn't let you set the style of Cancel button independently, unfortunately.


Try this and see: (I tested below code with Swift 4.1 - Xcode 9.3-beta4)

@IBOutlet weak var sbSearchBar: UISearchBar!sbSearchBar.showsCancelButton = truesbSearchBar.barTintColor = UIColor.bluesbSearchBar.tintColor = UIColor.redif let buttonItem = sbSearchBar.subviews.first?.subviews.last as? UIButton {    buttonItem.setTitleColor(UIColor.yellow, for: .normal)}

enter image description here