2013-12-09 35 views
1

我期待创建一个searchBar,虽然我在表格视图上有些工作,但仍需要一点努力才能使其完美无缺。如何使用取消按钮功能部署iOS 7 mail.app搜索栏

参考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]; 
} 
这个

所以,我基本上要搜索栏是可见的表视图所有的时间,并且不显示取消按钮,直到用户开始输入。如果他们执行搜索和它产生的结果要么没有,我想取消按钮:搜索栏的

  • ResignFirstResponder
  • 删除取消按钮
  • 返回表格视图如何在搜索之前。

感谢

+0

您可以使用搜索栏控制器从对象库中,而不仅仅是一个搜索栏。默认情况下,你有什么想要的。 –

+0

您可以使用此链接并查看示例代码。 https://developer.apple.com/library/iOs/samplecode/AdvancedTableSearch/Introduction/Intro.html – Manimaran

+0

谢谢你们 - 下面接受的答案帮助了我,无需使用searchdiplaycontroller - 再次感谢回复 – amitsbajaj

回答

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

谢谢@Zappel - 这是诚实的完美,它的作品就像一个魅力!我打算接受这个答案并投票表决。我只剩下一个问题 - 实际搜索栏中的“明确”,即小x,是可以通过方法控制的吗?因为现在发生的事情是我搜索,它显示我的搜索结果和resignsFirstResponder,如果我点击x,它显示调出响应者,然后我可以取消按取消按钮..同样的事情发生,如果我按下取消 - 无论如何,在辞职时,我只需按下x并重新加载表格?再次感谢 – amitsbajaj

+0

当然,看看这个:http://stackoverflow.com/a/3852509/746968 – Zappel

+0

谢谢我的朋友 - 完美的作品! :) – amitsbajaj