![](/img/trans.png)
[英]Pass data from tableview to view controller in tab bar in Swift
[英]Swift 3 - filter tableview from different view controller
我已經構建了一個以我構建的漂亮桌面為中心的應用程序。
我已經設置了一個輔助視圖控制器作為一個模態顯示的菜單,我想通過選擇輔助視圖控制器上的一個按鈕來過濾tableview。
例如,每個單元格都分配了一個城市。 在菜單中,我希望能夠單擊一個城市並過濾該表視圖,以僅顯示該城市的單元格。
我有太多的代碼要粘貼,我相信我可以用一點方向來解決這個問題。
謝謝你的幫助!
要做到這一點,你希望在應用程序中有單獨的DataSource層來移動清晰的代碼。我將為你編寫一個小例子來實現它。
例如,您有類DataSource
。 顯示您正在顯示的信息。 就我而言,它是cities
。 現在,當我想進行排序時,我將調用sortAlphabetically()
並重新加載tableview
。 這是一個非常簡單的方法,你的解決方案實際上取決於你如何使用UITableView
。
class DataSource {
var cities = ["Lviv", "Lutsk", "Kiev", "Rivne"]
func sortAlphabetically() {
cities = cities.sorted { $0 < $1 }
//reload tableview hear
}
}
您可以使用第二個視圖控制器按鈕的展開segue返回到表視圖控制器。
在你的表視圖控制器中,比方說,
func unwindToTableView(_ segue: UIStoryboardSegue) {
switch segue.identifier {
case "FilterNames":
filterByName()
etc…
}
}
或者你可以為每個過濾器設置不同的展開功能...
func unwindAndFilterName(_ segue: UIStoryboardSegue) {
filterByName()
}
etc
要掛鈎展開segue,只需將方法添加到表視圖控制器,然后在故事板中,從第二個視圖控制器上的按鈕拖動到它的“ 退出”圖標。 segue函數應出現在列表中
最好的方法是使用委托,向過濾器視圖控制器添加協議,在tableView中為tableView過濾數據源的委托函數。 在您轉到過濾器視圖控制器之前,不要忘記將表視圖控制器指定為委托
最好的方法是使用委托,向過濾器視圖控制器添加協議,在tableView中為tableView過濾數據源的委托函數。 在您轉到過濾器視圖控制器之前,不要忘記將表視圖控制器指定為委托
在您的filterViewController之前
protocol FilterViewControllerDelegate {
func tableViewCriteria(criteria: AnyObject)
}
在您的filterViewController中:
var delegate: FilterViewControllerDelegate?
在tableViewController的類聲明中,添加FilterViewControllerDelegate
class MyTableViewController: UITableViewController, FilterViewControllerDelegate{
在切換到filterView之前,不要忘記將FilterViewControllerDelegate設置為self:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showFilter" {
if let fvc = segue.destination as? FilterViewController{
fvc.delegate = self
}
}
}
在tableView中實現func,它將根據所選條件更新tableView數據源:
//In myTableViewController
func tableViewCriteria(criteria: AnyObject) {
//update tableView data source base on criteria here
return
}
最后,每當需要返回tableview時,都要從filterView調用delegate函數:
self.delegate?.tableViewCriteria(criteria: foo)
瞧! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.