2016-01-27 20 views
8

にフィルタボタンを追加します。私はすでにUIButtonsearchbarUIViewに追加しようとしましたが、これを私のUITableView tableView.tableHeaderViewと設定しました。tableView.tableHeaderViewがコントローラを終了するときにだけに戻ってくるので、これは機能しません。ここでは、私はそれを見たいの例です:enter image description hereは私が<code>UISearchController</code>内<code>searchBar</code>の隣にある「フィルタ」または「並べ替え」ボタンを追加したいUISearchController

+0

あなたが検索コントローラを使用している特別な理由があるのですか?それを使用せず、テーブルビューを直接フィルタリングすることはできますか? – Wain

+0

理由は純粋に光学的です。だから私は何でもうまくいくだろう – smnk

+0

私はより具体的にする必要があります、あなたはすでにテーブルビューを持って、それをフィルタリングするだけで幸せですか、検索結果を提示するために/検索コントローラのオーバーレイ機能が欲しいですか? – Wain

答えて

0

私は検索コントローラを失うだろう、それはあなたが提供する必要がある追加のビュー/ VC複雑さ/コードを追加する任意の機能を提供しません複製。それは、データ・ソースを持っているので

既存のテーブルビューはすでに、あなたが必要なすべてを持っています。それは配列かFRCのどちらかです。それは、アレイのなら、あなたはあなたのフィルタ処理内容で配列の内容を置き換えることができ、そしてそれはFRCだ場合は、述語を変更することができます。

注:アレイの場合に、最初に同じ配列への参照である2つの配列参照、すべてのフィルタリングされていないアイテムを保持する配列を指し1及び別の持っている - 第二の基準は、テーブルビューを移入するために使用されます。次に、フィルタリングするときに、フィルタされた項目だけを含む新しい配列を作成し、2番目の参照をその点でポイントします。

の代わりに使用すると、検索バーのデリゲートメソッドを実装し、フィルタリングをトリガーし、リセットするためにそれを使用して、検索コントローラのデリゲートメソッドを実装します。

は、今あなたが、テーブルビューを切り替えていないので、あなただけの1台のテレビと1つのヘッダビューを持っている検索コントローラー脱却しました。ヘッダービューを変更する必要はなく、すべてが機能します。

+0

私が探しているものを理解しているわけではありません。私はテーブルビューをフィルタリングする方法を知りたいのではなく、フィルタを取得する方法を教えてください。検索バーのすぐ隣にあるボタン(検索コントローラでは理想的) – smnk

+1

だからこそ、検索コントローラの紛失について尋ねました。あなたが持っている問題は、検索コントローラが別のビューを提示するため、ヘッダーが異なるように構成されていることです。他のビューに別のヘッダーを設定するだけで済みます。私は検索コントローラがほんのわずかな利益のために複雑さを加えていることがわかりました。ビューが1つだけの場合は、ヘッダーが1つあり、フォーカス管理も簡単です。 – Wain

3

私は検索バーをカスタマイズする方法の多くのを試してみましたが、何もフルフィル

let mysearchController = UISearchController(searchResultsController: nil) 
    mysearchController.searchBar.showsCancelButton = true 
    mysearchController.searchBar.barStyle = UIBarStyle.Black 
    for var subView1 in mysearchController.searchBar.subviews{ 
     for var subView2 in subView1.subviews{ 
      if subView2 .isKindOfClass(UIButton){ 
       let customizedCancelButton:UIButton = subView2 as! UIButton 
       customizedCancelButton.enabled = true 
       customizedCancelButton.setTitle("", forState: UIControlState.Normal) 
       let image1 = UIImage(named: "Sort") 
       customizedCancelButton.setBackgroundImage(image1, forState: UIControlState.Normal) 
       customizedCancelButton.addTarget(self, action: "sort", forControlEvents: UIControlEvents.TouchUpInside) 
      } 
     } 
    } 

コードの上、要件を理解する非常に簡単ですへの道を見つけた時、最後の私を助けてくれません。

func sort(){ 
     print("sort button fired!!!") 
    } 

enter image description here

4

代わりにUISearchBarをカスタマイズして、物事を複雑に、あなたは検索バーの横に、独自のボタンを追加することによって、それをシンプルに保つことができます。

設定しませんショーは

enter image description here

追加ショーは、ストーリーボードに検索バーのボタンオプションをキャンセル

self.searchBar.showsCancelButton = true 

OR

チェックを外しを使用して検索バー用のボタンオプションをキャンセルあなたの自分のボタンb

enter image description here

そして、以下のようにesideの検索バーには、それに応じてボタンにIBactionを追加し、その中にあなたの行動を実行します。

はまた、理想的な場合には、テーブルビューのヘッダにこのビューを置くことが推奨ではありません。 テーブルビューよりも上にある方がAppleよりも優れている方が良いでしょう。

enter image description here

3

私は数行のコードで検索フィルタを作成することができます。私はそれが助けて欲しい

*ブックマークボタンを選択してフィルタアイコンを適用しました。私はすでにカスタムアクションのためにキャンセルボタンを使用しているからです。

最初に、ブックマークボタンのクリック操作を処理するsearchBarを委譲しました。 次に、以下のようにプロパティを設定する必要があります。カスタムポジションを与えたい場合(デフォルトポジションは右側)、setPositionAdjustmentを設定する必要があります。

searchController.searchBar.delegate = self 
searchController.searchBar.showsBookmarkButton = true 
searchController.searchBar.setImage(UIImage(named: "Sort.png"), for: .bookmark, state: .normal) 
// MARK: You may change position of bookmark button. 
//searchController.searchBar.setPositionAdjustment(UIOffset(horizontal: 0, vertical: 0), for: .bookmark) 

次に、VC内のsearchBarBookmarkButtonClicked関数をオーバーライドします。このメソッド内でクリックイベントを処理できます。

func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) { //showAlert, presentVC or whatever you want here }

あなたが検索コントローラがアクティブな状態でブックマークボタンを非表示にする場合も、あなたはupdateSearchResultsメソッド内の制御を適用する必要があります。

if searchController.isActive { 
    searchController.searchBar.showsBookmarkButton = false 
} else { 
    searchController.searchBar.showsBookmarkButton = true 
} 

While searchController is not active

searchController is active

+0

すばらしい解決策!ありがとう。 – Alessign

関連する問題