我有一个小小的情况,我似乎无法克服。
我有一个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];
}
}
}
更新:两张图片
真的很感激任何指导!
答案 0 :(得分: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按钮,如果它显示键盘是否是第一个响应者,它将隐藏noResultsLabel。
感谢大家的帮助。
答案 1 :(得分:0)
您只需检查条件是否搜索文本长度为0,如果长度为0,则隐藏该标签。
文本更改时调用/ **(包括清除)* /
(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText1 {
if([searchText1 length] == 0){
//Hide The label
}
}