ios swift:Tableview“un”-复选标记单元格
Posted
技术标签:
【中文标题】ios swift:Tableview“un”-复选标记单元格【英文标题】:ios swift: Tableview "un"-checkmark cell 【发布时间】:2015-03-10 09:38:16 【问题描述】:在cellForRowAtIndexPath
方法中,当我知道有数据可以勾选时,我会这样做:
if (self.selectedLessonObject != nil)
if(lessons["name"] as String == selectedLessonObject["name"] as String)
cell.accessoryType = .Checkmark
在didSelectRowAtIndexPath
我愿意:
// update the checkmark for the current row
let cell = tableView.cellForRowAtIndexPath(indexPath)
cell?.accessoryType = .Checkmark
我还想不通的是如何在选择新单元格之前先取消选择旧单元格?
如何将选定的行保存在cellForRowAtIndexPath
中并在didSelectRowAtIndexPath
中访问以取消选择它?
谢谢!!
编辑:
当我尝试这个时:
var lastSelectedRow: NSIndexPath? = nil
在cellForRowAtIndexPath
if (self.selectedLessonObject != nil)
if(lessons.objectId == selectedLessonObject.objectId)
cell.accessoryType = .Checkmark
lastSelectedRow = tableView.indexPathForSelectedRow()
else
cell.accessoryType = .None
println("selected: \(lastSelectedRow)")
我得到一个零输出。
在didSelectRowAtIndexPath
我想到了这个:
// Other row is selected - need to deselect it
// catch the previous selected row
var oldcell = tableView.cellForRowAtIndexPath(lastSelectedRow!)
oldcell?.accessoryType = .None
但我无法捕捉从cellForRowAtIndexPath
到didSelectRowAtIndexPath
的当前行
【问题讨论】:
【参考方案1】:如果您在didSelectRowAtIndexPath
中选择新行,请检查新属性是否不为零,如果是则通过调用获取单元格
if let last = lastSelectedRow
let oldSelectedCell = tableView.cellForRowAtIndexPath(last)
oldSelectedCell.accessoryType = .None
lastSelectedRow = indexPath
let cell = tableView.cellForRowAtIndexPath(indexPath)
cell.accessoryType = .Checkmark
在cellForRowAtIndexPath
中检查新属性是否不为零且等于 indexPath 并勾选否则取消勾选:
if let last = lastSelectedRow
if (self.selectedLessonObject != nil)
if(lessons.objectId == selectedLessonObject.objectId && last == indexPath)
cell.accessoryType = .Checkmark
else
cell.accessoryType = .None
else
cell.accessoryType = .None
else
if (self.selectedLessonObject != nil)
if(lessons.objectId == selectedLessonObject.objectId)
cell.accessoryType = .Checkmark
lastSelectedRow = indexPath
else
cell.accessoryType = .None
【讨论】:
@user1555112 你试过什么?你可以发布你的代码吗?您必须将代码添加到 cellForRow 和 didSelectRow 方法。 @user1555112 请看我修改后的答案。 需要设置lastSelectedRow
的位置和类型?因为现在我从来没有达到 if 构造,因为 var 在正确的开头设置为 nil。
@user1555112 我再次编辑了我的过去。我看不到所有代码,很难为您提供解决方案。如果您仅对标记 selectedLessonObject.objectId 使用复选标记,则可以在 didSelectRow 中将值添加到该对象并在这种情况下重新加载表格视图,您甚至不需要 lastSelectedRow。
我现在做对了,非常感谢!这对我帮助很大!!谢谢!【参考方案2】:
您可以保存所选单元格的 indexPath 或行。或者你可以尝试从:
tableview.indexPathForSelectedRow()
【讨论】:
【参考方案3】:lastSelectedRow = indexPath
let cell = tableView.cellForRowAtIndexPath(indexPath)
cell!.accessoryType = .Checkmark
if selected.count > 0
if selected.containsObject(lastSelectedRow!.row)
if cell!.accessoryType == .Checkmark
cell!.accessoryType = .None
selected.removeObject(lastSelectedRow!.row)
else
cell!.accessoryType = .Checkmark
else
selected.addObject(lastSelectedRow!.row)
else
selected.addObject(lastSelectedRow!.row)
【讨论】:
变量选择:NSMutableArray!以上是关于ios swift:Tableview“un”-复选标记单元格的主要内容,如果未能解决你的问题,请参考以下文章
在 Xcode/Swift 中导出 TableView 数据
Swift - 多个 TableView 复选标记 - 保存和加载选择