views:

350

answers:

1

When I drop a UISearchBar into my view inside Interface Builder, and change its style to Black Opaque, the cancel button stays unfittingly blue / gray and doesn't become black.

How can I make the cancel button black?

EDIT: It does work like this:

// Assume a UISearchBar searchBar.
NSArray *subviews = [searchBar subviews];

// The index depends on how you configure the searchBar.
UIButton *cancelButton = [subviews objectAtIndex:3];

// Set the style to "normal" style.
[cancelButton setStyle:0];

But the setStyle: method is from a private framework, so this might be an issue when submitting the app to Apple.

A: 

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.

Alun