在您的情况下,您不想抑制 textDidChange 事件。相反,您希望 UISearchDisplayDelegate 的shouldReloadTableForSearchString:
方法返回NO
,除非单击了“搜索”按钮。
您可以创建一个布尔 ivar 来跟踪这一点。调用时将 ivar 设置为 NO,textDidChange
调用时将其设置为 YES searchBarSearchButtonClicked:
。然后在你的shouldReloadTableForSearchString:
你可以做测试。
编辑:通过扩展代码示例进行澄清。(在本例中,我假设您设置了一个名为 isSearchButtonClicked 的 ivar)。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
isSearchButtonClicked = NO;
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
isSearchButtonClicked = YES;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
// returns YES if search button was clicked, otherwise return NO
return isSearchButtonClicked;
}