我在这里有一个奇怪的情况,我相信会是一个简单的修复,但我无法找到那是什么。刷新UITableView当一个Segue发生到另一个视图控制器
我有一个UITableViewController
顶部UISearchBar
。用户点击NavigationBarButton
(添加条目)并填入UITextFields
中的一些信息,将其保存到Core Data
中填入UITableView
。 UITableView
正在使用NSFetchedResultsController
。
在searchBar
中,用户可以搜索名称。搜索本身工作得非常好,因为如果名称不存在,用户会看到一个UILabel
表示“找不到结果”。该标签在此UITableView
的viewDidLoad
创建并在searchBar's
textDidChange
方法显示:
- (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中没有搜索结果
我将如何去实现这一目标?
任何指导真的不胜感激。
听起来像你应该重新加载新视图控制器解雇的完成处理程序中的表。或者,Add Entry按钮应该取消搜索并在发生继续之前重置表格。 – nhgrif
谢谢@nhgrif - 这非常有帮助。我正在考虑第二种方法,但我不确定如何实现这一点。我应该基本上,将searchBar文本设置为零,并为prepareForSegue中的TableView重新装入数据? 另外,我是否需要调用textDidChange或其他方法? – amitsbajaj
我刚刚尝试过,将SearchBar文本设置为@“”并重新加载数据,当它从searchBar中删除文本时,它不会使用reloadData“取消搜索”。 – amitsbajaj