25

UIViewController 实现一个视图放置一个 UITableView UISearchBar 并被实现。但是你不能调用searchBarCancelButtonClicked。不知道是什么原因。

4

10 回答 10

10

searchBarCancelButtonClicked 没有触发的原因可能是因为您的 UISearchBar 没有显示取消按钮。您可以像这样显示取消按钮:

searchBar.showsCancelButton = true

我遇到了同样的问题,并且使取消按钮显示使 searchBarCancelButtonClicked 按预期触发。

于 2016-01-19T13:25:16.463 回答
6

确保您的 UIViewController 设置为 UISearchBar 的委托,并且它采用 UISearchBarDelegate 协议。

于 2010-12-06T16:25:53.613 回答
6
- (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];
    }
}

希望能帮助到你。

于 2011-03-24T07:39:46.943 回答
1

在我的情况下是一个不受控制的 userInteractionEnabled=NO

于 2016-06-28T22:07:09.213 回答
1

对我来说真正的原因是我认为小 x 按钮是取消按钮的意思,但事实并非如此......如果你遇到同样的问题,我使用下面的代码

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        if searchText.isEmpty {
            searchRecords.removeAll()
            searchTableView.reloadData()
        }
    }
于 2019-03-05T15:35:59.477 回答
0

斯威夫特 4.2

我遇到了同样的问题,必须在 searchBarCancelButtonClicked 方法起作用之前将 definedPresentationContext 属性设置为 true。

 definesPresentationContext = true
于 2019-04-21T23:45:55.233 回答
0

此行删除 UISearchController 透明视图

let searchController = UISearchController(searchResultsController: nil)
searchController.dimsBackgroundDuringPresentation = false
于 2018-09-12T09:18:12.613 回答
0

searchController.searchBar.delegate = self, 不只是searchController.delegate = self

于 2018-07-03T20:02:23.507 回答
0

试着把它放在 viewDidLoad 中。在我的情况下,有时取消按钮操作委托“searchBarCancelButtonClicked”已触发,有时没有(只是键盘被关闭并且取消按钮变得不活动),添加后一切都开始按预期工作。

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).isEnabled = true
于 2019-03-19T09:18:44.997 回答
-3

当我在 UIScrollView 中有一个 UISearchBar 时,我遇到了同样的问题。据我了解,您在 UITableView 中遇到了这个问题,它是 UIScrollView 的子类。

对我来说有帮助的是设置

tableView.delaysContentTouches = NO;

似乎该searchBarCancelButtonClicked方法不适用于设置为YES,这是默认设置。

于 2012-08-17T19:15:27.020 回答