簡體   English   中英

Swift 3 - 從不同的視圖控制器過濾tableview

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM