【问题标题】:How to deploy iOS 7 mail.app search bar with cancel button functionality如何使用取消按钮功能部署 iOS 7 mail.app 搜索栏
【发布时间】:2013-12-26 14:28:09
【问题描述】:

我正在寻找创建一个 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
  • 移除取消按钮
  • 将表格视图恢复到搜索前的状态。

谢谢

【问题讨论】:

  • 您可以使用对象库中的搜索栏控制器,而不仅仅是搜索栏。默认情况下,它有你想要的。
  • 您可以使用此链接并查看示例代码。 developer.apple.com/library/iOs/samplecode/AdvancedTableSearch/…
  • 谢谢你们 - 下面接受的答案帮助我不需要使用 searchdiplaycontroller - 再次感谢您的回复

标签: ios objective-c uisearchbar resignfirstresponder


【解决方案1】:

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];
}

【讨论】:

  • 谢谢@Zappel - 这真的是完美的,它就像一个魅力!我将接受该答案并投票。我只剩下一个问题-实际搜索栏中的“清除”,小x,可以通过方法控制吗?因为现在发生的事情是我搜索,它向我显示搜索结果和 resignsFirstResponder,如果我点击 x,它会显示响应者,然后我可以取消按下取消按钮..如果我按下取消,也会发生同样的事情- 无论如何,在辞职时,我可以按 x 并重新加载表格吗?再次感谢
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 2013-09-30
  • 1970-01-01
相关资源
最近更新 更多