我想在UISearchController
內部的searchBar
旁邊添加一個「篩選器」或「排序」按鈕。我已經嘗試將UIButton
和searchbar
併入到UIView
中,並將其設置爲我的UITableView tableView.tableHeaderView
這不起作用,因爲tableView.tableHeaderView
只有在關閉控制器時纔會回到UISearchBar
。下面是我希望它看起來如何的示例:將篩選器按鈕添加到UISearchController
回答
我會失去搜索控制器,它不會提供任何您想要的功能,而需要提供的附加視圖/ VC會增加複雜性/代碼複製。
您現有的表格視圖已經擁有了您需要的一切,因爲它具有數據源。這是一個數組或FRC。如果它是一個數組,那麼你可以用你的過濾內容替換數組的內容,如果它是一個FRC,你可以改變謂詞。
注意:在數組情況下,有兩個數組引用,1指向一個數組,其中包含所有未過濾項目,另一個最初是對同一數組的引用 - 第二個引用用於填充表格視圖。然後,當您過濾時,您將創建一個僅包含過濾項目的新數組,並指向第二個參考。
代替執行搜索控制器委託方法,您可以實現搜索欄委託方法並使用它來觸發過濾和重置。
現在你已經擺脫了搜索控制器,你也不會切換表視圖,所以你只有1個電視和1個標題視圖。現在沒有理由改變標題視圖並且一切正常。
我試過很多方法是可以自定義搜索欄,但沒有幫助我終於發現了一種完全填補你的要求
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!!!")
}
我可以創建的幾行代碼的搜索過濾器。我希望它有幫助。
*我選擇了書籤按鈕來應用過濾器圖標;因爲我已經使用取消按鈕進行自定義操作。
首先,您有委託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
}
偉大的解決方案!謝謝。 – Alessign
- 1. 將篩選器按鈕添加到JQGrid工具欄
- 2. 使用SimpleCursorAdapter將添加按鈕添加到Android選取器
- 3. Django篩選器按鈕
- 4. 將單選按鈕添加到Tkinter
- 5. 將按鈕添加到jtable
- 6. 將按鈕添加到UITableView
- 7. 將按鈕添加到jtable
- 8. 將按鈕添加到MKPointAnnotation
- 9. 將按鈕添加到JPanel
- 10. 將按鈕添加到UILabel
- 11. 將按鈕添加到QTableview
- 12. 將按鈕添加到UIDatePicker
- 13. 將OnGestureListener添加到按鈕?
- 14. 將按鈕添加到ListActivity
- 15. 將按鈕添加到UIScrollview
- 16. 將按鈕添加到infoWindow
- 17. 將按鈕添加到BrowseFragment
- 18. 將UIGesture添加到按鈕
- 19. 將ActionListener添加到按鈕
- 20. 將按鈕添加到JScrollpane
- 21. 將按鈕添加到gridview
- 22. 將按鈕添加到ViewPager
- 23. 將按鈕添加到uitextfield
- 24. 將按鈕添加到ListActivity
- 25. 將按鈕添加到JDesktopPane
- 26. 無法將UISearchController添加到UIViewController
- 27. 將UISearchController添加到非表視圖
- 28. 添加篩選器行到gridview
- 29. 將篩選函數添加到篩選器不起作用打印稿
- 30. 將onclick事件添加到動態添加的單選按鈕
有您使用的是搜索控制器一個特別的原因?你是否打算不使用它並直接過濾表視圖? – Wain
原因純粹是光學的。所以我可以很好地處理任何事情 – smnk
我應該更具體一些,你已經有了一個表格視圖,你是否樂意過濾它,或者你是否使用了一個特別不同的視圖來呈現搜索結果/想要搜索控制器覆蓋功能? – Wain