我已经构建了一个以我构建的漂亮桌面为中心的应用程序。
我已将辅助视图控制器设置为模态显示的菜单,我想通过选择辅助视图控制器上的一个按钮来过滤tableview。
例如,每个单元格都分配了一个城市。在菜单中,我希望能够点击一个城市并过滤该表格,以仅显示该城市的单元格。
我有太多的代码要粘贴,我相信我可以用一点方向来解决这个问题。
感谢您的帮助!
答案 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)
瞧! :)