Arrays UITableView numberOfRowsInSection-显示已完成/未完成的任务
我对Swift和iOS的世界相当陌生,我正在创建一个待办事项列表应用程序。我有一个显示列表名称及其任务的详细视图。我的目标是在两个单独的部分中显示任务,一个用于未完成的任务,另一个用于已完成的任务 在numberOfRowsInSection中,如果我使用:Arrays UITableView numberOfRowsInSection-显示已完成/未完成的任务,arrays,swift,uitableview,Arrays,Swift,Uitableview,我对Swift和iOS的世界相当陌生,我正在创建一个待办事项列表应用程序。我有一个显示列表名称及其任务的详细视图。我的目标是在两个单独的部分中显示任务,一个用于未完成的任务,另一个用于已完成的任务 在numberOfRowsInSection中,如果我使用: return list.tasks.count 我明白了: 在我的NumberOfSectionsTableView方法中,我返回2,如图所示,我将任务返回到两个部分。这对我来说是显而易见的,但我不知道如何才能做到这一点 在list.t
return list.tasks.count
我明白了:
在我的NumberOfSectionsTableView方法中,我返回2,如图所示,我将任务返回到两个部分。这对我来说是显而易见的,但我不知道如何才能做到这一点
在list.task.count中,“task”是一个具有属性“var isComplete:Bool=false”的类,我希望在这里使用该属性来分隔完成/未完成的任务。提前谢谢。最好使用不同的阵列。一个用于完成任务,一个用于未完成任务,然后您可以检查表视图的部分以了解要返回的行数 在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 selectedIndexPath.section == 0 {
destination.task = list.completedTasks[selectedIndexPath.row]
} else {
destination.task = list.incompleteTasks[selectedIndexPath.row]
}
最好使用不同的阵列。一个用于完成任务,一个用于未完成任务,然后您可以检查表视图的部分以了解要返回的行数 在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 selectedIndexPath.section == 0 {
destination.task = list.completedTasks[selectedIndexPath.row]
} else {
destination.task = list.incompleteTasks[selectedIndexPath.row]
}
在数据源方法
tableView(uquo:numberofrowsinssection:)
中,应根据节索引返回不同的值;e、 g:
if section == 0 {
return activeTasks.count
}
else if section == 1 {
return completedTasks.count
}
else {
return 0 // Error - should never happen
}
(假设已完成的任务和未完成的任务保留在两个单独的数组中)在数据源方法
表视图(u:numberOfRowsInSection:)
中,应根据节索引返回不同的值;e、 g:
if section == 0 {
return activeTasks.count
}
else if section == 1 {
return completedTasks.count
}
else {
return 0 // Error - should never happen
}
(假设您将已完成的任务和未完成的任务保存在两个单独的数组中)我将假设您有两个表,一个用于已完成的任务,另一个用于未完成的任务。您需要做的可能与此类似:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return list.tasks.count
} else {
return lists.completedTasks.count
}
}
然后在
cellforrowatinexpath
中,您应该使用相关信息设置单元格。您可以从该函数中的indexPath变量获取节和行,并根据需要使用该信息设置单元格。我假设您有两个表,一个用于已完成的任务,另一个用于未完成的任务。您需要做的可能与此类似:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return list.tasks.count
} else {
return lists.completedTasks.count
}
}
然后在
cellforrowatinexpath
中,您应该使用相关信息设置单元格。您可以从该函数中的indexPath变量中获取节和行,并根据需要使用该信息设置单元格。否,我只有一个表和多个节。我尝试将列表类中的属性从var tasks=[Task]()
更改为://var tasks=[Task]()
var completeTask=[Task]()
var incomplettetask=[Task]()
,但这会导致我以后在任务详细信息视图中尝试访问此任务时出现进一步的问题。否,我只有一张桌子和多个部分。我尝试将列表类中的属性从var tasks=[Task]()
更改为://var tasks=[Task]()
var incomplettetask=[Task]()
但这会在稍后尝试在“任务详细信息”视图中访问此任务时引发更多问题。谢谢@Sam。您建议我在哪里创建不同的阵列?在列表类中?我这样做了,它非常适合显示数据,但现在从prepareForSegue访问视图是我遇到的问题。是的,在list类中工作很好。您是否可以详细说明prepareForSegue的问题,或者如果这与prepareForSegue无关,您可以发布另一个问题这是prepareForSegue的外观:如果让destination=segue.destinationViewController作为?TaskDetailViewController,让selectedRow=tableViewTasks.indexPathForSelectedRow?.row{//let incompleteTask=list.incompleteTask[selectedRow]//让CompleteTTask=list.CompleteTTask[selectedRow]//destination.task=list.tasks[selectedRow]}
Ah,在这里,您需要再次检查该部分。因此,您应该只检查indexPathForSelectedRow,而不是indexPathForSelectedRow?行。从这里,您可以将部分作为selectedRow.section进行检查,并将索引作为selectedRow.row(可能需要更改命名约定)我已经编辑了我的原始帖子,以更详细地展示这一点。谢谢@Sam。您建议我在哪里创建不同的数组?在列表类中?我这样做了,它非常适合显示数据,但现在从prepareForSegue访问视图是我遇到的问题。是的,在list类中工作很好。您是否可以详细说明prepareForSegue的问题,或者如果这与prepareForSegue无关,您可以发布另一个问题这是prepareForSegue的外观:如果让destination=segue.destinationViewController作为?TaskDetailViewController,让selectedRow=tableViewTasks.indexPathForSelectedRow?.row{//let incompleteTask=list.incompleteTask[s]