2014-04-04 42 views
0

我在这里有一个奇怪的情况,我相信会是一个简单的修复,但我无法找到那是什么。刷新UITableView当一个Segue发生到另一个视图控制器

我有一个UITableViewController顶部UISearchBar。用户点击NavigationBarButton(添加条目)并填入UITextFields中的一些信息,将其保存到Core Data中填入UITableViewUITableView正在使用NSFetchedResultsController

searchBar中,用户可以搜索名称。搜索本身工作得非常好,因为如果名称不存在,用户会看到一个UILabel表示“找不到结果”。该标签在此UITableViewviewDidLoad创建并在searchBar'stextDidChange方法显示:

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

    self.timelineSearchBar.showsCancelButton = YES; 

    _fetchedResultsController = nil; 
    NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) 
    { 
     // Handle Error 
    } 
    else 
    { 
     [self.timelineTableView reloadData]; 
     [self.noResultsLabel setHidden:_fetchedResultsController.fetchedObjects.count > 0]; 
     if (![self.timelineSearchBar isFirstResponder]) 
     { 
      self.shouldBeginEditing = NO; 
      [self.timelineTableView reloadData]; 
      [self.timelineSearchBar resignFirstResponder]; 
     } 

    } 
} 

的问题

的问题来自于特定的一组步骤。

1)搜索条目不存在

2)没有结果标签将显示

3)在不取消搜索,添加项(其中塞格斯新的视图控制器)

4)当在新的视图控制器上单击“保存”按钮时,它将取消该视图并将用户带回到UITableView。

5)无结果标签仍然可见,与searchBar中的搜索字符串一样。

即使您搜索特定用户并找到匹配结果,然后在取消搜索之前添加条目,也会出现相同的结果;当你返回到UITableView时,搜索仍然显示。

我试过几件事的组合。

viewWillAppear,我把[self.tableView reloadData];但这并没有什么区别。

我想我必须做一些事情在prepareForSegue,所以如果它塞格斯来添加条目,或由小区中的用户点击(两个不同的塞格斯),它应该:

1)取消现有的搜索

2)删除noresultsLabel如果有

3)显示TableView中没有搜索结果

我将如何去实现这一目标?

任何指导真的不胜感激。

+0

听起来像你应该重新加载新视图控制器解雇的完成处理程序中的表。或者,Add Entry按钮应该取消搜索并在发生继续之前重置表格。 – nhgrif

+0

谢谢@nhgrif - 这非常有帮助。我正在考虑第二种方法,但我不确定如何实现这一点。我应该基本上,将searchBar文本设置为零,并为prepareForSegue中的TableView重新装入数据? 另外,我是否需要调用textDidChange或其他方法? – amitsbajaj

+0

我刚刚尝试过,将SearchBar文本设置为@“”并重新加载数据,当它从searchBar中删除文本时,它不会使用reloadData“取消搜索”。 – amitsbajaj

回答

0

我已经解决了这个问题或许是一种粗糙的方式;在搜索启动并运行时禁用Add Entry按钮。我不相信这是实现这一目标的最佳方式,但用户必须取消搜索才能添加条目。我会继续找到一个更好的方法来实现这一点。

相关问题