仅使用 UISearchBar 时如何触发 "cancel search"?

How to trigger the "cancel search" when using only a UISearchBar?

我有一个 table 视图,其中 header 显示 UISegmentedControlUISearchBar。请记住,我没有使用 UISearchController。当我搜索完当前列表并切换到不同的段时,我想取消搜索并使用新数据重新加载列表。

目前我正在手动清除搜索文本、动画化取消按钮并隐藏键盘。但我也在我的 searchBarCancelButtonClicked 方法中这样做。

仅使用 UISearchBar 时,有没有办法以编程方式取消搜索(清除文本、隐藏键盘和隐藏取消按钮)?

不,没有办法自动清除文本字段、隐藏键盘等。尽管这看起来是常见的功能,但由每个开发人员决定如何实现它。 Apple 只是提供了在用户点击取消按钮时捕获事件的功能。

通常,我会在视图控制器中创建一个本地函数,例如:

-(void)clearSearchBar:(UISearchBar *)searchBar {
    searchBar.Text = @"";
    [searchBar resignFirstResponder];
    ...
 }

然后,在 searchBarCancelButtonClicked: 中(假设您已经为搜索栏创建了一个 IBOutlet),您可以这样做:

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [self clearSearchBar:self.searchBar];
}

然后您还可以在任何需要清除它的地方调用 clearSearchBar:

显然,这里可以使用类别来避免重复代码。

您也可以这样调用 searchBarCancelButtonClicked:

[self.searchBar.delegate searchBarCancelButtonClicked:self.searchBar];