0

我有一個包含UISearchBar的視圖。這個UISearchBar是而不是顯示在頁面頂部 - 它是從屏幕頂部向下約90分,在標題圖片下。取消搜索時setContentOffset設置不正確

視圖的所有元素都被包裝在一個UIScrollView中。當用戶點擊UISearchBar時會發生正確的事情 - 整個視圖向上滾動,因此搜索欄位於屏幕的頂部,視圖內容上方會出現黑色疊加層,並且鍵盤向上滑動。

目前爲止都很好。當我想要取消搜索時,問題就出現了,並且所有的內容都會返回到之前的位置(UISearchBar不再位於屏幕的頂部)。

我能夠做到這一點,如果用戶在鍵盤顯示時點擊取消 - 只需監聽UIKeyboardWillHideNotification,然後將滾動視圖的內容偏移設置回(0,0)即可。

但是,如果用戶在某些搜索結果中拖動手指,鍵盤將消失,因此您可以獲得更大的搜索結果視圖。如果用戶點擊取消,搜索欄會保留在頁面頂部,而且一切看起來都很糟糕。

我試圖把「setContentOffset」代碼在UISearchDisplayDelegate:

- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView 
{ 
    [_scrollView setContentOffset:CGPointMake(0,0) animated:YES]; 
} 

這工作,但看起來並不太好,因爲滾動不發生後,才搜索結果中消失了(所以你看到兩個獨立的動畫)。

我然後試圖此方法(在表視圖被隱藏之前的權利被稱作):

- (void)searchDisplayController:(UISearchDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableView 
{ 
    [_scrollView setContentOffset:CGPointMake(0,0) animated:YES]; 
} 

但是,沒有任何影響。內容偏移不會更改。

任何提示?

回答

0

也許搜索顯示控制器正在爲您設置內容偏移?嘗試在searchDisplayController:didShowSearchResultsTableView:中設置內容偏移量。

+0

當搜索欄首次獲得焦點時,搜索顯示控制器肯定會設置內容偏移量。我遇到的問題是當用戶點擊取消並且鍵盤已經隱藏時,將滾動視圖偏移返回到0,0。 searchDisplayController:didShowSearchResultsTableView:在用戶點擊取消時不會被調用。 – MikeQ 2010-09-23 00:26:13

+0

如果你不介意稍微弱點的東西,你可以使用類似' - (BOOL)respondsToSelector:(SEL)selector {NSLog(@「%@」,NSStringFromSelector(selector)); return [superrespondsToSelector:selector];}'看看UISearchDisplayController使用了什麼其他的方法,並重寫它們以查看它們是否有任何作用。 – 2010-09-24 16:47:50