如果用户启动了

时间:2017-11-15 18:14:06

标签: ios swift uitableview uikit

我有一个allowsMultipleSelection设置为true的tableView。在自定义的UITableViewCell子类中,我覆盖了setSelected:animated。当我选择单元格(通过点击)时,以及当我滚动时,当单元格被重用时,会调用此方法。现在,我希望animated参数的用例是这样的,可以为用户交互动画选择,并且当状态由于单元格重用而简单地改变时不进行动画处理。但是,animated始终作为false传递,无论如何调用它。当UIKit调用它时,animated是真的吗?

当然,我可以通过以下方式明确区分用户交互和小区重用:(a)删除allowsMultipleSelection,(b)实施UITableViewDelegate didSelect和{{1方法,以及(c)从这两种方法中使用didDeselect调用setSelected。但这似乎只是为了改变一个小细节而复制了许多原生行为;我可以保存一个委托实现,让我的代码更直观地阅读(至少对我来说)如果我能以某种方式让tableView在用户启动选择或取消选择时默认传递animated: true。有没有办法让tableViews这样做?

编辑:更不用说,明确地从animated: truesetSelected委托方法中调用didSelect并不能真正起作用,因为它仍然也是由tableView调用。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用

选择单元格
cell.isSelected = true
  

选择会影响标签,图像和背景的外观。当单元格的选定状态设置为true时,它将为所选单元格绘制背景,其标题为白色。默认值为false。如果通过此属性将选择状态设置为true,则不会设置到新状态外观的过渡。有关动画选定状态转换,请参阅setSelected(_:animated :)方法。

正如您所看到的,使用isSelected时,默认情况下动画过渡为false。

请改为尝试:

cell.setSelected(true, animated: true)

Documentation