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

但我无法捕捉从cellForRowAtIndexPathdidSelectRowAtIndexPath 的当前行

【问题讨论】:

【参考方案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 复选标记 - 保存和加载选择

从Swift数组中的选定复选标记中删除字符串

Swift 3 tableView 未在 reloadData() 上更新

swift 3中的静态关键字

将复选标记保存到 tableView Swift 时出现问题