1

我正在寻找创建一个 searchBar,虽然我在我的表格视图上有点工作,但仍然需要一些努力才能让它 100% 完美。

参考 iOS 7 Mail.app,我该如何部署类似的东西?因此,在您单击搜索栏之前不会显示“取消”按钮的搜索栏,以及取消搜索并将表格返回到原来位置的取消按钮。

我有以下代码:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    _fetchedResultsController = nil;
    NSError *error;

    if (![[self fetchedResultsController] performFetch:&error])
    {
        NSLog(@"Error in search %@, %@", error, [error userInfo]);
    }

    else
    {
        [self.timelineTableView reloadData];
        [self.timelineSearchBar resignFirstResponder];
        [self.noResultsLabel setHidden:_fetchedResultsController.fetchedObjects.count > 0];
    }
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    [self.timelineSearchBar resignFirstResponder];
    self.timelineSearchBar.hidden = YES;
    [self.timelineTableView reloadData];
    [self viewDidLoad];
}

所以有了这个,我基本上希望 searchBar 在表格视图中一直可见,并且不显示取消按钮,直到用户开始输入。如果他们执行搜索并产生结果或没有结果,我希望取消按钮:

  • 搜索栏的 ResignFirstResponder
  • 移除取消按钮
  • 将表视图恢复到搜索前的状态。

谢谢

4

1 回答 1

3

在中使用以下两种方法UISearchBarDelegate并执行以下操作:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:YES animated:YES];
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:NO animated:YES];
}

如果您希望搜索看起来更具响应性,您可以将发布的代码移动到searchBar:textDidChange:委托方法,然后仅用于searchBarSearchButtonClicked:执行以下操作[searchBar resignFirstResponder]

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{

    _fetchedResultsController = nil;
    NSError *error;

    if (![[self fetchedResultsController] performFetch:&error])
    {
        NSLog(@"Error in search %@, %@", error, [error userInfo]);
    }

    else
    {
        [self.timelineTableView reloadData];
        [self.noResultsLabel setHidden:_fetchedResultsController.fetchedObjects.count > 0];
    }
}

此外,您还可以使用searchBarCancelButtonClicked:来从搜索栏中退出第一响应者,然后通过调用委托来更新您的表格视图searchBar:textDidChange:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    [searchBar setText:@""];
    [self searchBar:searchBar textDidChange:@""];
    [searchBar resignFirstResponder];
}
于 2013-12-09T13:56:38.873 回答