How we can change the title of cancel button in search controller?
You can change the "Cancel" Button in search bar using this-
for (UIView *view in searchBar.subviews)
{
for (id subview in view.subviews)
{
if ( [subview isKindOfClass:[UIButton class]] )
{
[subview setEnabled:YES];
UIButton *cancelButton = (UIButton*)subview;
[cancelButton setTitle:@"hi" forState:UIControlStateNormal];
NSLog(@"enableCancelButton");
return;
}
}
}
The solution provided above could change with new iOS releases. Here is a better approach:
[searchBar setValue:@"customString" forKey:@"_cancelButtonText"];
_cancelButtonText
is private, it may also change with new iOS releases if Apple decides to rename it, and because it's private they can safely presume that nobody is using this name in their apps –
Unrelenting The Swift equivalent of Burhanuddin Sunelwala answer did the trick for me!
self.searchBar.setValue("custom string", forKey: "cancelButtonText")
Thanks to Burhanuddin Sunelwala for putting me in the right direction!
You can change the "Cancel" Button in search bar using this-
for (UIView *view in searchBar.subviews)
{
for (id subview in view.subviews)
{
if ( [subview isKindOfClass:[UIButton class]] )
{
[subview setEnabled:YES];
UIButton *cancelButton = (UIButton*)subview;
[cancelButton setTitle:@"hi" forState:UIControlStateNormal];
NSLog(@"enableCancelButton");
return;
}
}
}
Worth noting, that the preferred method for changing the Cancel button title is now via appearances (got the idea from an another question: https://mcmap.net/q/365955/-change-uisearchbar-cancel-button-text-in-ios-8):
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTitle:@"Annuler"];
You should use the appearance proxy of the UISearchBar. You can find an example here - How to change the default text of Cancel Button which appears in the UISearchBar +iPhone
swift version:
for view:UIView in (searchView?.subviews)!
{
for subView:UIView in (view.subviews)
{
if ( subView is UIButton )
{
let cancelBut = subView as! UIButton
//do stuff with cancelButton here
}
}
}
for (UIView *subView in SearchBar.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
UIButton *cancelButton = (UIButton*)subView;
[cancelButton setTitle:@"TitleString" forState:UIControlStateNormal];
}
class ViewController: UIViewController,UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
//write your code here
}
@IBOutlet weak var navItem: UINavigationItem!
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
searchController.obscuresBackgroundDuringPresentation = false
searchController.definesPresentationContext = true
searchController.searchResultsUpdater = self
if #available(iOS 11.0, *){
navigationItem.searchController = searchController
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "new title"
}
// Do any additional setup after loading the view.
}
}
swift 4 & 5
The best and simple way that worked for me is this snippet of code:
if let cancelButton = searchBar.value(forKey: "cancelButton") as? UIButton {
cancelButton.setTitle("Annuler", for: .normal)
}
You can modify more properties like this:
if let cancelButton = searchBar.value(forKey: "cancelButton") as? UIButton {
cancelButton.setTitle(<your_string>, for: <UIControlState>)
cancelButton.setTitleColor(<your_uicolor>, for: <UIControlState>)
cancelButton.setAttributedTitle(<your_nsattributedstring>, for: <UIControlState>)
}
I hope this helps :)
You also need to have the searchBar setShowsCancelButton
before the procedure.
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
[theSearchBar setShowsCancelButton:YES animated:NO];
for (UIView *subView in theSearchBar.subviews){
if([subView isKindOfClass:[UIButton class]]){
[(UIButton*)subView setTitle:@"Done" forState:UIControlStateNormal];
}
}
}
Note also use UIButton to avoid problems with Apple!
Swift 4.2, 4.0+
A custom class
that supports many customizations with the below results is added in the answer here.
© 2022 - 2024 — McMap. All rights reserved.