UIViewController用于实现一个视图来放置一个UITableView和UISearchBar,但是无法调用searchBarCancelButtonClicked方法。不知道原因。
UIViewController用于实现一个视图来放置一个UITableView和UISearchBar,但是无法调用searchBarCancelButtonClicked方法。不知道原因。
searchBarCancelButtonClicked无法触发的原因可能是您的UISearchBar未显示取消按钮。您可以通过以下方式显示取消按钮:
searchBar.showsCancelButton = true
我遇到了同样的问题,让“取消”按钮显示出来后,searchBarCancelButtonClicked
就像预期那样触发了。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
// This method has been called when u enter some text on search or Cancel the search.
// so make some condition for example:
if([searchText isEqualToString:@""] || searchText==nil) {
// Nothing to search, empty result.
searching = NO;
[mytableView reloadData];
}
}
确保您的UIViewController被设置为UISearchBar的代理,并且采用了UISearchBarDelegate协议。
searchController.searchBar.delegate = self
并调用了该方法。谢谢。 - Andrés Pizá BückmannsearchController.searchBar.delegate = self
,而不是仅仅使用searchController.delegate = self
在我的情况下,是由于未受控制的userInteractionEnabled=NO。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
searchRecords.removeAll()
searchTableView.reloadData()
}
}
这行代码可以移除 UISearchController 的透明视图
let searchController = UISearchController(searchResultsController: nil)
searchController.dimsBackgroundDuringPresentation = false
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).isEnabled = true
Swift 4.2
我曾经遇到过同样的问题,必须在 searchBarCancelButtonClicked 方法之前将 definesPresentationContext 属性设置为 true 才能正常工作。
definesPresentationContext = true
tableView.delaysContentTouches = NO;
似乎将searchBarCancelButtonClicked
方法设置为默认值YES
时无法正常工作。