6

我有一個父類與tableview和搜索欄,它是tableview控制器的子類。 searchBar和searchdisplaycontroller的代理設置在從UISearchdisplaycontroller繼承的獨立類中。 tableview和searchbar的數據源和委託在這個類中單獨處理。這些課程在ARC之下。不能關閉搜索視圖

因此,當用戶點擊搜索時,控件從FilesListController(父類)類轉移到此類。現在,當取消按鈕用戶點擊,搜索欄代表在這個類即

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar 

設置的調用,但不服務駁回全屏searchtableview的目的,並返回到parentviewcontroller。但是,如果我不在搜索類中編寫此委託,它將正常工作。

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar 

這樣的:我在廈門國際銀行和調用設置搜索欄代表

self.searchResultsTableView.delegate = self; 
self.searchResultsTableView.dataSource = self; 
[parentFileViewController.searchDisplayController setDelegate:self]; 

我要去哪裏錯了?提前致謝。

+0

[self.searchDisplayController setActive:NO anima泰德:YES]; – jussi

+0

嘿感謝@jussi ..它的作品!但爲什麼它不會自行解僱?這就像我們迫使searchviewcontroller解僱。 –

+0

,因爲有些人想在解散控制器之前存儲一些信息。我會將其作爲答覆發佈。 – jussi

回答

13

如果您想取消與一個SearchBarController一個UISearchBar,只要使用此代碼:

[self.searchDisplayController setActive:NO animated:YES]; 
1

你應該實現辭職委託函數的響應即

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { 
     [searchBar resignFirstResponder]; 
} 
+0

這只是解除鍵盤,但不會關閉搜索視圖和取消按鈕。 –

+0

在這種情況下,jussi是對的 – cekisakurek

-1

內存警告可以在出現在應用程序運行期間的任何時候,您都必須假定會發生內存警告,並且必須重新創建視圖和一次性對象。

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

if([self isViewLoaded] && self.view.window == nil) 
{ 
    self.view = nil; 
    keys = nil; 
    names = nil; 
    errorDuringNetworkCall = nil; 
} 
} 

並通過執行SEGUE操作之前解僱的搜索欄實現代碼如下:

我們被設置爲nil,我們的陣列處理這種情況

[self performSegueWithIdentifier:@"navigateToNextScreen" sender:self]; 
self.searchBar.text = @""; 
[self.searchDisplayController setActive:NO animated:YES]; 

接收到內存警告後, viewDidLoad方法被再次調用並且數組被填充,搜索欄將繼續有用。沒有問題的工作

+0

我不認爲這是回答所有問題 –