创建单元格时手动调用 didDeselectRowAtIndexPath

Manually call didDeselectRowAtIndexPath when cell is created

我在 UIViewController 中有一个 UITableViewUIViewControllerUITableViewdelegate。在我的 table 视图中,我正在输出具有可变行数的可变数量的部分。 Whenever any cell is selected, a checkmark needs to appear next to it (which is currently working).但是,创建单元格时,特定部分旁边需要复选框。

为了解决这个问题,我有一个包含 headers、数据和标志的数组。

这是我的数组,它指定了 staticFlag

{arrayOfHeadersAndData.append((/// arrray stuff in a tuple ///,staticFlag: 0))}

这是我添加复选框的方法:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
     tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.Checkmark
}

下面是我尝试在具有 staticFlag=0=

的部分添加复选框的方法
if arrayOfHeadersAndData[indexPath.section].staticFlag == 0 {
        tableView(tableViewOfCurrentItems, didSelectRowAtIndexPath: indexPath)
}

我当前的错误是

"Cannot call value of non-function type 'UITableView'

因为您将方法作为函数调用。第二件事是您正在尝试从 table 视图调用方法,但据我所知,这是委托方法(并且您的控制器是委托)。所以你需要这样调用:

self.tableView(tableViewOfCurrentItems, didSelectRowAtIndexPath: indexPath)

只是稍微更改了设置。如果您有一组需要复选标记的索引,看起来是 arrayOfHeadersAndData,您需要在 cellForRowAtIndexPath 方法中设置复选标记。

您需要在添加新单元格时重新加载。您的新单元格将调用 cellForRowAtIndexPath 并添加一个复选标记。所以..

  1. 在您的 cellForRowAtIndexPath 中,您将根据 arrayOfHeadersAndData 检查单元格。如果他们在特定的部分,给他们打勾
  2. 仅使用 tableView.reloadSections(NSIndexSet(index: your_section_number), withRowAnimation: .None)
  3. 重新加载该部分

tableView:didSelectRowAtIndexPath: 是一个 UITableViewDelegate 方法,需要在 UITableViewDelegate 实例上调用,例如self.tableView(tableViewOfCurrentItems, didSelectRowAtIndexPath: indexPath)tableView.delegate?.tableView(tableViewOfCurrentItems, didSelectRowAtIndexPath: indexPath).

您调用 didSelectRowAtIndexPath 来应用此更改似乎很奇怪。这听起来像是代表在口述 table 视图单元格外观的细节。相反,您可以完全在自定义 UITableViewCell subclass 中实现此复选标记的显示,并让它管理隐藏或显示复选标记以响应它的 selected 属性 和 setSelected:animated: 方法。然后你可以在准备预选单元格时调用 cell.selected = true 。该方法还允许您在单元格 class 上实施 prepareForReuse 以在重复使用单元格之前根据需要清除选择状态,并避免可能无意中在其他行上显示这些复选标记。