UISearchBar 在搜索没有结果时显示标签,但在单击 UISearchBar 中的 x 时不会再次隐藏标签
Posted
技术标签:
【中文标题】UISearchBar 在搜索没有结果时显示标签,但在单击 UISearchBar 中的 x 时不会再次隐藏标签【英文标题】:UISearchBar displaying a label when a search produces no results, but not hiding the label again when the x in the UISearchBar is clicked 【发布时间】:2014-04-11 07:03:39 【问题描述】:我有一个小情况,我似乎无法克服。
我有一个 UITableView,它在顶部嵌入了一个 UISearchBar。 TableView 由 NSFetchedResultsController 和 CoreData 填充。
应用程序第一次启动时,没有数据,如果用户尝试搜索,我启用了在屏幕中间显示“未找到结果”的标签。但是,如果用户单击 UISearchBar 中的 x,它会清除搜索但不会再次隐藏标签。
我没有 UISearchBar 的取消按钮(它只是 x),并且我实现了在搜索处于活动状态时隐藏导航栏按钮的使用。
考虑到这一点,我已将问题范围缩小到 textDidChange 方法,但当用户按下 x 时,无论是否按下键盘,我似乎都无法隐藏标签。
我希望有人能对此有所了解!
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
self.eventSearchBar.showsCancelButton = NO;
if ([self.eventSearchBar.text length] > 0)
self.addButton.enabled = NO;
// This code seems to have no effect at all
if ([searchText length] == 0)
self.noResultsLabel.hidden = YES;
_fetchedResultsController = nil;
NSError *error;
if (![[self fetchedResultsController] performFetch:&error])
else
[self.eventTableView reloadData];
[self.noResultsLabel setHidden:_fetchedResultsController.fetchedObjects.count > 0];
if (![self.eventSearchBar isFirstResponder])
self.shouldBeginEditing = NO;
[self.eventTableView reloadData];
[self.eventSearchBar resignFirstResponder];
更新:两张图片
任何指导将不胜感激!
【问题讨论】:
你为什么不尝试使用UISearchDisplayController
感谢 Himanshu - 我现在对我的应用程序进行更改太远了,在我准备将我的应用程序更新到 App Store 之前我只是遇到了这个小问题.. 所以我可能会考虑它未来,但现在,这个小问题需要我用这种方法关注,我觉得我最多错过一两行
您想在按钮操作时清除搜索栏的文本字段?
UISearchBar x 已经在清除搜索。我想要发生的是,当你按下 x 时,标签也会隐藏起来。
能否提供屏幕截图?
【参考方案1】:
我已经成功地按照我的意愿完成了这项工作。
我发现我的 textDidChange 中的以下代码在键盘仍然打开并且用户按下 x 按钮时起作用:
if (![self.eventSearchBar isFirstResponder])
self.shouldBeginEditing = NO;
[self.eventTableView reloadData];
[self.eventSearchBar resignFirstResponder];
所以在这里,我把 self.noResultsLabel.hidden = YES;
如果键盘是第一响应者并且用户按下 x,我还想隐藏 noResultsLabel,我做了以下操作:
if ([self.eventSearchBar isFirstResponder] && ([self.eventSearchBar.text length] == 0))
self.noResultsLabel.hidden = YES;
self.addButton.enabled = YES;
[self.eventTableView reloadData];
现在,用户可以按下 UISearchBar 中的 x 按钮,如果它显示键盘是否是 firstResponder,它将隐藏 noResultsLabel。
感谢大家的帮助。
【讨论】:
【参考方案2】:您只需检查搜索文本长度是否为 0 的条件,如果长度为 0 则隐藏该标签。
/** 当文本改变(包括清除)时调用 */
(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText1
if ([searchText1 长度] == 0)
//Hide The label
【讨论】:
感谢@VMC501 和 vipul 的帮助。当然,我已经得到了它与我对这个问题的回答。如果可以,我会在 2 天内接受。感谢您抽出宝贵时间。 请在下面发布您的工作答案,以便对其他人有所帮助以上是关于UISearchBar 在搜索没有结果时显示标签,但在单击 UISearchBar 中的 x 时不会再次隐藏标签的主要内容,如果未能解决你的问题,请参考以下文章
将 UISearchBar 与表视图控制器一起使用并转到另一个视图时显示问题
在 becomeFirstResponder 上禁用 UISearchBar 搜索图标和占位符文本动画
防止 TableView Header 在执行 [uitableView reloadData] 时显示