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

问题描述:

我已经构建了一个应用程序,围绕着我已经建立的漂亮的tableview。Swift 3 - 从不同的视图控制器过滤器tableview

我已经设置了辅助视图控制器作为模式显示的菜单,并且我想通过选择辅助视图控制器上的其中一个按钮来过滤tableview。

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

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

感谢您的帮助!

+0

你的问题在哪里?你有尝试过什么吗? –

+0

@Lu_我已经尝试过自定义赛格等。我不能让桌面视图过滤或采取任何行动从第二个视图控制器上的按钮点击。 – scttcrry

+0

不要显示您的所有代码,但请添加_relevant_代码。告诉我们你试过了什么,什么没有工作 –

你可以从你的第二个视图控制器的按钮返回到您的表视图控制器开卷SEGUE做到这一点。

在你的表视图控制器,也就是说,

func unwindToTableView(_ segue: UIStoryboardSegue) { 

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

,或者你可以为每个过滤器不同的开卷funcs中......

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

etc 

挂钩开卷SEGUE,只需添加方法你桌面视图控制器,然后在您的故事板中,从第二个视图控制器上的按钮拖动到它的退出图标。 segue func应该出现在列表中

+1

我很确定这就是我正在寻找的!我会试一试! – scttcrry

+0

这就是我最终使用的!非常感谢! – scttcrry

要做到这一点,你希望在应用程序中有单独的DataSource层来清除代码。我会为你写一个很小的例子,让你可以实现它。

例如,您有类DataSource。随着你显示的信息。在我的情况下,它是cities。现在,当我想要进行分类时,我将拨打sortAlphabetically()并重新加载tableview。这很简单,你的解决方案真的取决于你如何与UITableView合作。

class DataSource { 

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

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

} 
+0

谢谢!我会试试这个。这会在tableviewcell.swift中进行吗? – scttcrry

+0

@scttcrry将代表设置为tableview时。做这个self.tableview.datasource =数据源 –

+0

谢谢!我会给这个镜头。 – scttcrry

最好的方法是使用委托,在过滤视图控制器中添加一个协议,并在tableView中为tableView过滤数据源中的委托函数。不要忘记在您继续使用过滤器视图控制器之前将表视图控制器分配给过滤器视图控制器

最好的方法是使用委托,在过滤视图控制器中添加一个协议并在tableView中添加一个委托函数,数据源为tableView。不要忘了你的表视图控制器指定作为委托你Segue公司之前,过滤器视图 - 控制

您filterViewController

protocol FilterViewControllerDelegate { 
    func tableViewCriteria(criteria: AnyObject) 
} 

在你filterViewController之前:

var delegate: FilterViewControllerDelegate? 

在类的声明tableViewController,添加FilterViewControllerDelegate

class MyTableViewController: UITableViewController, FilterViewControllerDelegate{ 

不要忘记设置FilterViewControllerDelegate自我您Segue公司的filterView前:

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) 

瞧! :)