2014-04-04 44 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按鈕。我不相信這是實現這一目標的最佳方式,但用戶必須取消搜索才能添加條目。我會繼續找到一個更好的方法來實現這一點。

相關問題