2016-01-27 59 views
8

我想在UISearchController內部的searchBar旁邊添加一個「篩選器」或「排序」按鈕。我已經嘗試將UIButtonsearchbar併入到UIView中,並將其設置爲我的UITableView tableView.tableHeaderView這不起作用,因爲tableView.tableHeaderView只有在關閉控制器時纔會回到UISearchBar。下面是我希望它看起來如何的示例:enter image description here將篩選器按鈕添加到UISearchController

+0

有您使用的是搜索控制器一個特別的原因?你是否打算不使用它並直接過濾表視圖? – Wain

+0

原因純粹是光學的。所以我可以很好地處理任何事情 – smnk

+0

我應該更具體一些,你已經有了一個表格視圖,你是否樂意過濾它,或者你是否使用了一個特別不同的視圖來呈現搜索結果/想要搜索控制器覆蓋功能? – Wain

回答

0

我會失去搜索控制器,它不會提供任何您想要的功能,而需要提供的附加視圖/ VC會增加複雜性/代碼複製。

您現有的表格視圖已經擁有了您需要的一切,因爲它具有數據源。這是一個數組或FRC。如果它是一個數組,那麼你可以用你的過濾內容替換數組的內容,如果它是一個FRC,你可以改變謂詞。

注意:在數組情況下,有兩個數組引用,1指向一個數組,其中包含所有未過濾項目,另一個最初是對同一數組的引用 - 第二個引用用於填充表格視圖。然後,當您過濾時,您將創建一個僅包含過濾項目的新數組,並指向第二個參考。

代替執行搜索控制器委託方法,您可以實現搜索欄委託方法並使用它來觸發過濾和重置。

現在你已經擺脫了搜索控制器,你也不會切換表視圖,所以你只有1個電視和1個標題視圖。現在沒有理由改變標題視圖並且一切正常。

+0

我不是你明白我在找什麼。我不想知道如何過濾tableView,而是如何設法在搜索欄旁邊找到一個過濾按鈕(理想情況下,在搜索控制器中) – 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和複雜的東西,你可以把它加入搜索條旁邊自己的按鈕簡單。

設置否節目取消使用

self.searchBar.showsCancelButton = true 

OR

取消選中演出取消按鈕選項搜索欄在故事板

enter image description here

添加搜索欄按鈕選項您自己的按鈕b eside搜索欄如下圖所示

enter image description here

,然後相應地在其添加IBAction爲到按鈕和執行你的行動。

同樣在理想情況下,不建議將此視圖放在tableview的標題中。 如果它位於桌面視圖之上,Apple也會更好。

enter image description here

3

我可以創建的幾行代碼的搜索過濾器。我希望它有幫助。

*我選擇了書籤按鈕來應用過濾器圖標;因爲我已經使用取消按鈕進行自定義操作。

首先,您有委託searchBar來處理書籤按鈕點擊操作。 然後你應該設置屬性如下。如果你想給定製位置(默認位置是右側),你需要設置定位調整。

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