如何在Swift中使用UISegmentedControl筛选表视图单元格?
在提问之前我已经搜索过了,但是我没有找到我需要的 我正在构建这个应用程序,用户在其中放置一个任务(不去应用程序商店,只为我和一些朋友),并且任务有一个类别。例如:学校、家庭、朋友等。当用户要添加新任务时,有两个文本字段,描述文本字段和类别文本字段。我正在使用UIPickerView,因此用户选择一个类别,然后在创建新任务后,它会将该类别添加到我创建的名为“categories”的数组中 我想在表视图的顶部放置一个UISegmentedControl,其中包含以下部分: 所有-学校-家庭-朋友 如果选择“全部”,则将显示所有单元格,不进行过滤。如果没有,它将显示具有相应类别的单元格 我已经读到,我需要为每个类别创建表视图部分,但这将极大地改变我的代码,我甚至不知道如何使用多个表视图部分,我尝试过一次,但它在第二次中不断重复一个部分的单元格 那么我如何过滤每个类别的单元格呢 我可以举个例子吗如何在Swift中使用UISegmentedControl筛选表视图单元格?,swift,uitableview,swift2,uisegmentedcontrol,Swift,Uitableview,Swift2,Uisegmentedcontrol,在提问之前我已经搜索过了,但是我没有找到我需要的 我正在构建这个应用程序,用户在其中放置一个任务(不去应用程序商店,只为我和一些朋友),并且任务有一个类别。例如:学校、家庭、朋友等。当用户要添加新任务时,有两个文本字段,描述文本字段和类别文本字段。我正在使用UIPickerView,因此用户选择一个类别,然后在创建新任务后,它会将该类别添加到我创建的名为“categories”的数组中 我想在表视图的顶部放置一个UISegmentedControl,其中包含以下部分: 所有-学校-家庭-朋友 如
if //code to check in which section the picker is here {
if let schoolCell = cell.categories[indexPath.row] == "School" {
schoolCell.hidden = true
}
}
请帮帮我
编辑:
我现在有这个代码:
if filterSegmentedControl.selectedSegmentIndex == 1 {
if categories[indexPath.row] == "School" {
}
}
我只是不知道接下来该怎么办。如何识别和隐藏单元格?这取决于您的tableview 如果使用NSFetchedResultsController,则需要修改提取请求。如果直接使用数组,只需在Swift中使用filter函数,传入条件,例如
filteredArray=array.filter{$0.isAudioFile}
,然后在将数据源数组设置为筛选数组后,在tableview上调用reloadData
您需要保留对完整数组的引用,并在
cellForRow…
中使用过滤后的数组作为您的数据源。在我看来,您可能需要先采取一种更简单的方法,然后让它工作起来。设置ViewController,并为表数据添加一个tableView和两(2)个数组。一个在家,另一个在工作。是的,我知道这很简单,但如果你能让它工作起来,那么你就可以在它的基础上再接再厉
添加变量以跟踪正在显示的数据
@IBOutlet var segmentedControl: UISegmentedControl!
@IBOutlet var tableView: UITableView!
// You would set this to 0, 1 or 2 for home, work and all.
var dataFilter = 0
// Data for work tasks
var tableDataWork : [String] = ["Proposal", "Send mail", "Fix printer", "Send payroll", "Pay rent"]
// Data for home tasks
var tableDataHome : [String] = ["Car payment", "Mow lawn", "Carpet clean"]
为分段控件添加这些函数
@IBAction func segmentedControlAction(sender: AnyObject) {
switch segmentedControl.selectedSegmentIndex {
case 0:
print("Home")
dataFilter = 0
case 1:
print("Work")
dataFilter = 1
case 2:
print("All")
dataFilter = 2
default:
print("All")
dataFilter = 2
}
reload()
}
func reload() {
dispatch_async( dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("task-cell")
var title: String?
switch dataFilter {
case 0:
title = tableDataHome[indexPath.row]
case 1:
title = tableDataWork[indexPath.row]
case 2:
if indexPath.row < tableDataWork.count {
title = tableDataWork[indexPath.row]
} else {
title = tableDataHome[indexPath.row - tableDataWork.count]
}
default:
if indexPath.row < tableDataWork.count {
title = tableDataWork[indexPath.row]
} else {
title = tableDataHome[indexPath.row + tableDataWork.count]
}
}
cell?.textLabel?.text = title
if cell != nil {
return cell!
}
return UITableViewCell()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// If
switch dataFilter {
case 0: return tableDataHome.count
case 1: return tableDataWork.count
default: return tableDataHome.count + tableDataWork.count
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
@iAction func segmentedControlAction(发送方:AnyObject){
开关分段控制。选择分段索引{
案例0:
打印(“主页”)
数据过滤器=0
案例1:
印刷品(“作品”)
数据过滤器=1
案例2:
打印(“全部”)
数据过滤器=2
违约:
打印(“全部”)
数据过滤器=2
}
重新加载()
}
func reload(){
dispatch\u async(dispatch\u get\u main\u queue()){
self.tableView.reloadData()
}
}
func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
let cell=tableView.dequeueReusableCellWithIdentifier(“任务单元”)
变量标题:字符串?
开关数据过滤器{
案例0:
title=tableDataHome[indexPath.row]
案例1:
title=tableDataWork[indexPath.row]
案例2:
如果indexath.rowInt{
//如果
开关数据过滤器{
案例0:返回tableDataHome.count
案例1:返回tableDataWork.count
默认值:return tableDataHome.count+tableDataWork.count
}
}
func numberOfSectionsInTableView(tableView:UITableView)->Int{
返回1;
}
您可以在此处找到整个项目:您应该筛选数据(数组等),然后重新加载表视图。我如何使用此.filter函数筛选类别字符串?我尝试过“categories.filter(“School”),但它给了我一个错误。如何使用它,以及什么是“抛出”?因此,过滤器函数接受查询,您需要为被查询的对象传递$0,以及属性和条件。例如,someArray.filter{$0.category=“School”}$0表示数组中的每个对象,这些对象将被检查其类别匹配是否不工作:(我想我需要放弃这个想法。也许唯一的方法是创建分区……我意识到即使它工作,单元格也会出现故障,我只想更改类别标签,但不更改任务标签,这样就可以显示其他单元格的任务,而不是它自己的任务。我会看一看,非常感谢!