我在问这个问题之前已经搜过了这个问题,但我找不到我需要的东西。
我正在构建这个用户放置任务的应用程序(不是去我的应用商店,只为我和一些朋友),而且任务有一个类别。例如:学校,家庭,朋友等。当用户要添加新任务时,有2个文本字段,描述文本字段和类别文本字段。我正在使用UIPickerView,因此用户选择一个类别,然后,在创建新任务后,它会将类别添加到我创建的名为“类别”的数组中。
我想在表格视图的顶部放置一个UISegmentedControl:
全部 - 学校 - 主页 - 朋友
如果选择all,则会显示所有没有过滤的单元格。如果没有,它将显示具有相应类别的单元格。
我已经读过我需要为每个类别创建表视图部分,但这会改变我的代码很多,我甚至不知道如何使用多个表视图部分,我已经尝试了一次,但它不断重复第二节中一节的细胞。
那么如何过滤每个类别的细胞?
我可以举个例子吗? :
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" {
}
}
我只是不知道从哪里开始。如何识别和隐藏细胞?
答案 0 :(得分:2)
在我看来,您可能希望先采用更简单的方法,然后开始工作。设置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;
}
您可以在此处找到整个项目:https://github.com/ryantxr/segmented-control-app
答案 1 :(得分:1)
这取决于你的桌面视图。
如果您使用NSFetchedResultsController,则需要修改获取请求。如果直接使用数组,只需在Swift中使用过滤函数,传入条件,例如: filteredArray = array.filter{$0.isAudioFile}
然后,在将数据源数组设置为已过滤的数组后,请在您的tableview上调用reloadData
。
您需要保留对完整数组的引用,并在cellForRow...