Swift: searchBar - 如何更改 "Cancel" 按钮标题
Swift: searchBar - how to change "Cancel" Button title
我有一个采用了 UISearchBarDelegate 的 UIViewController。并将其委托设置为自我:resultSearchController.searchBar.delegate = self。它工作正常我用 searchBarCancelButtonClicked 方法测试它%
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
println("Сancel button tapped")
}
我在控制台中看到“点击取消按钮”。但我想更改 "Cancel" 按钮标题,但我不知道如何更改。我试过:
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
var barButton = UIBarButtonItem(title: "Button Title", style: UIBarButtonItemStyle.Done, target: self, action: "here")
self.resultSearchController.searchBar.showsCancelButton = false
self.resultSearchController.navigationItem.rightBarButtonItem = barButton
}
但是没用。你能帮帮我吗?
首先,您需要在导航控制器中显示自定义搜索栏按钮,例如
in ViewDidLoad()
self.searchDisplayController?.displaysSearchBarInNavigationBar = true
并在委托方法中
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
var barButton = UIBarButtonItem(title: "Button Title", style: UIBarButtonItemStyle.Done, target: self, action: "here")
self.searchDisplayController?.navigationItem.rightBarButtonItem = barButton
}
func searchDisplayControllerWillBeginSearch(controller: UISearchDisplayController) {
self.searchDisplayController?.searchBar.showsCancelButton = true
var cancelButton: UIButton
var topView: UIView = self.searchDisplayController?.searchBar.subviews[0] as UIView
for subView in topView.subviews {
if subView.isKindOfClass(NSClassFromString("UINavigationButton")) {
cancelButton = subView as UIButton
cancelButton.setTitle("Vazgeç", forState: UIControlState.Normal)
}
}
}
我通过在 UISearchBar 对象中找到 UIButton 指针解决了这个问题。我的项目中有 objective-c 代码,但您可以看到其中的逻辑。
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
[searchBar setShowsCancelButton:YES animated:YES];
for (UIView *ob in ((UIView*)searchBar.subviews[0]).subviews) {
if ([ob isKindOfClass:[UIButton class]]) {
UIButton *btn = (UIButton*)ob;
[btn setTitle:@"İptal" forState:UIControlStateNormal];
}
}
return YES;
}
尝试使用 setValue 访问按钮文本,如下所示:
Swift 4
searchController.searchBar.setValue("New Title", forKey: "cancelButtonText")
对我有用:)
勾选这个answer。
以上答案中的示例更新为 Swift 5:
if let cancelButton = searchController.searchBar.value(forKey: "cancelButton") as? UIButton {
cancelButton.setTitle(<your_string>, for: <UIControlState>)
cancelButton.setTitleColor(<your_uicolor>, for: <UIControlState>)
cancelButton.setAttributedTitle(<your_nsattributedstring>, for: <UIControlState>)
}
初始化搜索控制器后,将其放入视图控制器的 viewDidLoad()
中。
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "your button title"
对于Swift 5
searchBar.delegate = 自己
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
let cBtn = searchBar.value(forKey: "cancelButton") as! UIButton
cBtn.setTitle("MyCustomText", for: .normal)
}
我有一个采用了 UISearchBarDelegate 的 UIViewController。并将其委托设置为自我:resultSearchController.searchBar.delegate = self。它工作正常我用 searchBarCancelButtonClicked 方法测试它%
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
println("Сancel button tapped")
}
我在控制台中看到“点击取消按钮”。但我想更改 "Cancel" 按钮标题,但我不知道如何更改。我试过:
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
var barButton = UIBarButtonItem(title: "Button Title", style: UIBarButtonItemStyle.Done, target: self, action: "here")
self.resultSearchController.searchBar.showsCancelButton = false
self.resultSearchController.navigationItem.rightBarButtonItem = barButton
}
但是没用。你能帮帮我吗?
首先,您需要在导航控制器中显示自定义搜索栏按钮,例如
in ViewDidLoad()
self.searchDisplayController?.displaysSearchBarInNavigationBar = true
并在委托方法中
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
var barButton = UIBarButtonItem(title: "Button Title", style: UIBarButtonItemStyle.Done, target: self, action: "here")
self.searchDisplayController?.navigationItem.rightBarButtonItem = barButton
}
func searchDisplayControllerWillBeginSearch(controller: UISearchDisplayController) {
self.searchDisplayController?.searchBar.showsCancelButton = true
var cancelButton: UIButton
var topView: UIView = self.searchDisplayController?.searchBar.subviews[0] as UIView
for subView in topView.subviews {
if subView.isKindOfClass(NSClassFromString("UINavigationButton")) {
cancelButton = subView as UIButton
cancelButton.setTitle("Vazgeç", forState: UIControlState.Normal)
}
}
}
我通过在 UISearchBar 对象中找到 UIButton 指针解决了这个问题。我的项目中有 objective-c 代码,但您可以看到其中的逻辑。
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
[searchBar setShowsCancelButton:YES animated:YES];
for (UIView *ob in ((UIView*)searchBar.subviews[0]).subviews) {
if ([ob isKindOfClass:[UIButton class]]) {
UIButton *btn = (UIButton*)ob;
[btn setTitle:@"İptal" forState:UIControlStateNormal];
}
}
return YES;
}
尝试使用 setValue 访问按钮文本,如下所示:
Swift 4
searchController.searchBar.setValue("New Title", forKey: "cancelButtonText")
对我有用:)
勾选这个answer。
以上答案中的示例更新为 Swift 5:
if let cancelButton = searchController.searchBar.value(forKey: "cancelButton") as? UIButton {
cancelButton.setTitle(<your_string>, for: <UIControlState>)
cancelButton.setTitleColor(<your_uicolor>, for: <UIControlState>)
cancelButton.setAttributedTitle(<your_nsattributedstring>, for: <UIControlState>)
}
初始化搜索控制器后,将其放入视图控制器的 viewDidLoad()
中。
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "your button title"
对于Swift 5
searchBar.delegate = 自己
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
let cBtn = searchBar.value(forKey: "cancelButton") as! UIButton
cBtn.setTitle("MyCustomText", for: .normal)
}