UITableView numberOfRowsInSection - 显示完成/不完整的任务

时间:2016-06-24 04:10:13

标签: arrays swift uitableview

我对Swift和iOS世界相当陌生,我正在创建一个待办事项列表应用程序。我有详细视图,显示列表名称及其任务。我的目标是在两个单独的部分中显示任务,一个用于不完整的任务,另一个用于已完成的任务。

在numberOfRowsInSection中,如果我使用:

return list.tasks.count

我明白了:

enter image description here

在我的numberOfSectionsInTableView方法中,我返回2,正如您在图像中看到的那样,我将任务返回到两个部分。这对我来说很明显,但我无法弄清楚如何做到这一点。

在list.task.count"任务"是一个具有属性的类" var isComplete:Bool = false"我希望在这里分开完成/不完整的任务。提前谢谢。

3 个答案:

答案 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
}

(假设您将已完成的任务和未完成的任务保存在两个单独的阵列中)