2017-02-03 63 views
1

我在UITableView的標題中使用UISearchController的UISearchBar。我的搜索工作正常,當我在搜索欄的字段中輸入一些文本時,所有相關的方法都會被調用,並且表視圖按預期顯示正確的搜索結果。當失去焦點時,UISearchController搜索欄文字消失

問題出現在我想要點擊某個結果來完成某件事情時。只要點擊其中一個表格視圖單元格,搜索欄中的字段就會變爲空白。由於搜索文本現在爲空,因此搜索結果將更新,並且表視圖會以零結果重新加載。所以表格單元上的水龍頭什麼也不做,因爲表格單元不再存在。

我可以通過更新我的updateSearchResultsForSearchController:方法來解決大多數此問題,以便在搜索字符串爲空時不更新搜索結果。這工作正常。但無論如何,我仍然希望搜索文本留在搜索字段中,這是我問題的癥結所在......

爲什麼我的搜索文本從搜索字段中消失,以及如何防止當我點擊其他地方時搜索字段變空了?

以下是我設置了搜索欄和搜索控制器:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    searcher = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    searcher.searchResultsUpdater = self; 
    searcher.delegate = self; 
    searcher.definesPresentationContext = YES; 
    resultsTable.tableHeaderView = searcher.searchBar; 

編輯:我注意到,雖然搜索欄具有焦點的表格視圖單元爲灰色。所以我認爲搜索控制器正在捕獲所有觸摸,並可能將它們作爲「取消」操作來處理。如果是這樣,我該如何阻止它以這種方式取消?

+0

看看https://developer.apple.com/reference/uikit/uisearchcontroller/1618656-obscuresbackgroundduringpresenta >「如果你使用相同的視圖控制器來顯示搜索內容和搜索結果,建議您將此屬性設置爲false,此屬性的默認值爲true。「 –

+0

是的,你是對的 - 這已經解決了我的問題。我幾乎在你發佈的同一時間發現了它。我感覺有點傻。無論如何,我已經將它作爲答案發布,以防以後幫助其他人。 –

回答

1

想通了。我需要添加:

searcher.obscuresBackgroundDuringPresentation = NO;