2016-03-24 9 views
0

私は完全にうまく動作するUITableViewを持っています。これはUITabbarControllerにネストされています。SearchResultDetailViewからUITableViewに戻る方法

また、UISearchControllerをUISearchBarに統合しました.UISearchBarは、ユーザーがUITableViewのコンテンツを検索できるようにします。これも正常に動作します。

TableViewCellの1つを選択すると、DetailViewが表示されます。

アクティブ検索なしでこれを行うと、すべて正常に動作しますが、searchtermを入力して結果からセルを選択すると、先頭に戻るボタンがないため、TableViewに戻ることはできません左隅にも、スワイプバックジェスチャーを使用することはできません。

は私がにsearchResults用に別のUITableViewを指定していないことを、追加する必要があります:

self.searchController.searchBar.delegate = self 
self.searchController.searchResultsUpdater = self 
self.tableView.tableHeaderView = self.searchController.searchBar   
self.definesPresentationContext = true 

私はこのようなSearchControllerを定義します。

var searchController: UISearchController = { 
     let controller = UISearchController(searchResultsController: nil) 
     controller.dimsBackgroundDuringPresentation = false 
     controller.searchBar.sizeToFit() 
     return controller 
    }() 

私は多分、私が持っていること、考えUITabbarControllerにUINavigationControllerを置き、TableViewをそのRootViewControllerとして設定しますが、次にNavigationBarの背後にSearchBarが隠されているという問題がありました。

EDIT(@ryantxr): 私didSelectRowAtIndexPath:cellForRowAtIndexPath

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    } 

細胞が同じに見えるように、検索とノー検索に違いはありません。これは、なぜ私がまだ2つの異なるセグを使用していない理由です。

あなたが正しいです、私は検索と検索を使用しているときに別のセグを使用しません。ストーリーボードにセルがクリックされたときに使用される唯一のセグメントはprepareForSegueです。ターゲットUIViewControllerの属性も正しく設定されていますが、これも正常に動作します。

+1

あなたのテーブルビュー関数、didSelectRowAtIndexPath、cellForRowAtIndexPathなどを見ることができますか?それは検索対非検索の場合、詳細画面への遷移は別のセグに処理されますか? – ryantxr

+1

明確にするために、非検索モードで詳細画面に切り替えると戻るボタンが表示されますが、検索モードから離れると戻るボタンは表示されません。これは正しいです? – ryantxr

+0

はい、そうです – Heckscheibe

答えて

0

問題はUISearchControllerは、このために責任があった含まれているのUITableViewControllerのコードのこの小さな作品だったことが判明:これを削除することにより

self.definesPresentationContext = true 

、結果ビューコントローラが正しく表示およびnavigationbarはしませんでした。消えて検索結果に戻ることができました...

関連する問題