Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Cocoa tableview复选框状态在滚动时丢失_Swift_Cocoa_Checkbox_Tableview_State - Fatal编程技术网

Swift Cocoa tableview复选框状态在滚动时丢失

Swift Cocoa tableview复选框状态在滚动时丢失,swift,cocoa,checkbox,tableview,state,Swift,Cocoa,Checkbox,Tableview,State,我有一个带有复选框的viewbase tableview。我为nstableviewcell创建自定义类,以操纵每行的复选框 问题是当我选中tableview中的多个复选框并向下滚动时。然后我向后滚动,复选框状态消失,尽管选定的数据在数组中 这是我的桌面视图 else if tableView.tag == 2{ if (tableColumn?.identifier)!.rawValue == "AlbumColumn" . { if let cel

我有一个带有复选框的viewbase tableview。我为nstableviewcell创建自定义类,以操纵每行的复选框

问题是当我选中tableview中的多个复选框并向下滚动时。然后我向后滚动,复选框状态消失,尽管选定的数据在数组中

这是我的桌面视图

else if tableView.tag == 2{
        if (tableColumn?.identifier)!.rawValue == "AlbumColumn" .   {
            if let cell: MyCustomViewCell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "AlbumColumn"), owner: self) as? MyCustomViewCell
            {
                cell.AlbumCbx.state = NSControl.StateValue(rawValue: 0)
                cell.AlbumCbx.title = albums[row]!
                cell.onClickAlbumCbx = { sender in
                    if !selected_album.isEmpty{
                        if cell.AlbumCbx.state.rawValue == 1{
                            selected_album.append(albums[row]!)

                        } else {
                            selected_album = selected_album.filter({ $0 != albums[row]! })
                        }
                    }
                }

                return cell
            }
        }
    }
我在google和stackoverflow上进行了搜索,找到了解决此问题的方法:

func tableView(_ tableView: NSTableView, rowViewForRow row:Int) -> NSTableRowView? {

}

虽然我不知道如何实现这个方法

我是这样写的,效果很好

cell.AlbumCbx.state = NSControl.StateValue(rawValue: 0)

    for s in selected_album{
        if cell.AlbumCbx.title == s
        {
           //print(true, cell.AlbumCbx.title)
           cell.AlbumCbx.state = NSControl.StateValue(rawValue: 1)    
        }
    }

您的
selected\u album
变量是否是类似于结构的值类型对象?或者它是引用类型?如果它是值类型,并且您正在创建一个变量来更新类似于
let selected\u album=datasourceArray[indexPath.row]
的内容,那么您的变量是数据源数组中项的副本,您正在修改副本,而不是数据源中的项。然后,当您滚动并重新加载单元格时,您正在使用原始变量填充单元格,而不是更新的变量。您需要使用引用类型,或者使用更新的
选定的\u相册
项更新数据源数组。不可见的表格单元格视图将被重用。在
tableView(uquo:viewFor:row:)
中,您设置了标题,但将状态设置为0。将状态设置为正确的状态。@Willeke,奇怪,我删除了这个“cell.AlbumCbx.state=NSControl.StateValue(rawValue:0)”,它在滚动后确实显示了一些复选标记,尽管表格将复选框1的复选标记移动到了其他复选框。谢谢,我找到了解决方案。