2

据我所知,UISearchDisplayController可以在两种情况下解雇活动:

  1. 随时单击取消按钮时
  2. 当搜索文本字段为空并且点击搜索栏下方的灰色变暗区域时。

我能够通过该searchBarCancelButtonClicked方法轻松检测到案例 1。至于案例 2,似乎没有任何委托方法可以用来在点击时立即获得通知。

我实现了所有的委托方法来研究调用的顺序,发现对于案例 2,只有两个方法被触发:

点击 --> willUnloadSearchResultsTableView-->searchDisplayControllerDidEndSearch

但是,这两个事件仅在点击延迟后触发,而不是在立即点击事件时触发(后者是我真正需要的)。

为了完整起见,以下是案例 1 的一系列事件:

searchBarCancelButtonClicked--> willHideSearchResultsTableView--> didHideSearchResultsTableView--> willUnloadSearchResultsTableView-->searchDisplayControllerDidEndSearch

有任何想法吗?

This answer to this question建议使用searchDisplayControllerDidEndSearch,但对我来说为时已晚。出于好奇,我打算在取消搜索时立即将搜索文本值重置为以前的值。当文本仅在延迟后设置时,在搜索栏中实施此逻辑willUnloadSearchResultsTableView或会导致搜索栏中相当难看的闪烁。searchDisplayControllerDidEndSearch

谢谢!

4

1 回答 1

1

尝试使用: 1。

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;

此方法由 UISearchDisplayController 组合的 searchBar 调用。 但是您需要非常准确地定义何时返回 YES/NO(隐藏第一响应者)。

PS也许你需要将searchBar的代表分配给自己。

2.

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller;

总是从这两种情况中调用。

于 2013-06-20T08:35:30.107 回答