我对Swift和iOS世界相当陌生,我正在创建一个待办事项列表应用程序。我有详细视图,显示列表名称及其任务。我的目标是在两个单独的部分中显示任务,一个用于不完整的任务,另一个用于已完成的任务。
在numberOfRowsInSection中,如果我使用:
return list.tasks.count
我明白了:
在我的numberOfSectionsInTableView方法中,我返回2,正如您在图像中看到的那样,我将任务返回到两个部分。这对我来说很明显,但我无法弄清楚如何做到这一点。
在list.task.count"任务"是一个具有属性的类" var isComplete:Bool = false"我希望在这里分开完成/不完整的任务。提前谢谢。
答案 0 :(得分:1)
拥有不同的数组可能会更好。一个用于完成任务,一个用于未完成的任务,那么您可以检查表视图的部分以了解要返回的行数。
在numberOfRows中:
if section == 0 {
return completedTasks.count
} else {
return incompleteTasks.count
}
这也可以让你检查cellForRowAtIndexPath部分,你不需要记住数组中完成/不完整任务的位置:
if indexPath.section == 0 {
cell.task = completedTasks[indexPath.row]
} else {
cell.task = incompleteTask[indexPath.row]
}
更新
要在评论中解决此问题:
if let destination = segue.destinationViewController as? TaskDetailViewController {
let selectedRow = tableViewTasks.indexPathForSelectedRow?.row {
// let incompleteTask = list.incompleteTask[selectedRow]
// let completeTask = list.completeTask[selectedRow]
// destination.task = list.tasks[selectedRow]
}
}
您应该检查tableViewTasks.indexPathForSelectedRow是否存在,而不是该行是否存在所以更改:
let selectedRow = tableViewTasks.indexPathForSelectedRow?.row {
到
if let selectedIndexPath = tableViewTasks.indexPathForSelectedRow {
然后检查该部分以查看所需的数组以及要查看所需索引的行:
if selectedIndexPath.section == 0 {
destination.task = list.completedTasks[selectedIndexPath.row]
} else {
destination.task = list.incompleteTasks[selectedIndexPath.row]
}
答案 1 :(得分:1)
我将假设您有两个表,一个用于已完成的任务,另一个用于未完成的任务。您需要做的事情可能与此类似:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return list.tasks.count
} else {
return lists.completedTasks.count
}
}
然后在cellForRowAtIndexPath
中,您应该设置包含相关信息的单元格。您可以从该函数中的indexPath变量获取section和row,并使用该信息根据需要设置单元格。
答案 2 :(得分:0)
在数据源方法tableView(_: numberOfRowsInSection:)
中,您应该根据节索引返回不同的值; e.g:
if section == 0 {
return activeTasks.count
}
else if section == 1 {
return completedTasks.count
}
else {
return 0 // Error - should never happen
}
(假设您将已完成的任务和未完成的任务保存在两个单独的阵列中)