我在這裏有一個奇怪的情況,我相信會是一個簡單的修復,但我無法找到那是什麼。刷新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