Swift 3 - 从不同的视图控制器过滤tableview

时间:2017-03-17 11:16:59

标签: ios swift xcode uitableview

我已经构建了一个以我构建的漂亮桌面为中心的应用程序。

我已将辅助视图控制器设置为模态显示的菜单,我想通过选择辅助视图控制器上的一个按钮来过滤tableview。

例如,每个单元格都分配了一个城市。在菜单中,我希望能够点击一个城市并过滤该表格,以仅显示该城市的单元格。

我有太多的代码要粘贴,我相信我可以用一点方向来解决这个问题。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

要做到这一点,你希望在应用程序中有单独的DataSource层来移动清晰的代码。我将为你编写一个小例子来实现它。

例如,您有班级DataSource。显示您正在显示的信息。就我而言,它是cities。现在,当我想要排序时,我会调用sortAlphabetically()并重新加载tableview。这是一种非常简单的方法,您的解决方案实际上取决于您使用UITableView的方式。

class DataSource {

    var cities = ["Lviv", "Lutsk", "Kiev", "Rivne"]

    func sortAlphabetically() {
        cities = cities.sorted { $0 < $1 }
        //reload tableview hear
    }

}

答案 1 :(得分:0)

您可以使用第二个视图控制器按钮的展开segue返回到表格视图控制器。

在表视图控制器中,比如说,

func unwindToTableView(_ segue: UIStoryboardSegue) {

    switch segue.identifier {
        case "FilterNames":
            filterByName()
        etc…
    }    
}

或者你可以为每个过滤器设置不同的展开功能...

func unwindAndFilterName(_ segue: UIStoryboardSegue) {
    filterByName()
}

etc

要连接展开segue,只需将方法添加到表格视图控制器,然后在故事板中,从第二个视图控制器上的按钮拖动到退出图标。 segue函数应出现在列表

答案 2 :(得分:0)

最好的方法是使用委托,向过滤器视图控制器添加协议,在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调用委托函数:

self.delegate?.tableViewCriteria(criteria: foo)

瞧! :)