【问题标题】:Manually call didDeselectRowAtIndexPath when cell is created创建单元格时手动调用 didDeselectRowAtIndexPath
【发布时间】:2016-06-23 21:24:53
【问题描述】:

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

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

这是我的数组,它指定了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)
}

我目前的错误是

"不能调用非函数类型的值'UITableView'

【问题讨论】:

    标签: ios iphone swift uitableview didselectrowatindexpath


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      self.tableView(tableViewOfCurrentItems, didSelectRowAtIndexPath: indexPath)
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-10
          • 2020-08-24
          • 1970-01-01
          • 2022-11-11
          • 2011-08-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多