UISearchBar在搜索没有产生结果时显示标签,但在点击UISearchBar中的x时不再隐藏标签

时间:2014-04-11 07:03:39

标签: ios uilabel uitableview uisearchbar

我有一个小小的情况,我似乎无法克服。

我有一个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];
        }
    }
}

更新:两张图片

enter image description here

enter image description here

真的很感激任何指导!

2 个答案:

答案 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
    

    }

}