【问题标题】:let UITableView animate selection if user-initiated如果用户启动,让 UITableView 动画选择
【发布时间】:2017-11-15 18:14:05
【问题描述】:

我有一个将allowsMultipleSelection 设置为true 的tableView。在自定义 UITableViewCell 子类中,我已经覆盖了setSelected:animated。当我选择单元格(通过点击)以及滚动时,这会被调用,因为单元格正在被重用。现在,我希望animated 参数的用例能够为用户交互设置动画,而不是在状态由于单元重用而简单更改时设置动画。然而,animated 总是作为 false 传递,不管它是如何被调用的。当 UIKit 的东西调用 animated 时,它是真的吗?

当然,我可以通过 (a) 删除 allowsMultipleSelection,(b) 实现 UITableViewDelegatedidSelectdidDeselect 方法,以及 (c) 调用 @987654330 来明确区分用户交互和单元重用@ 和 animated: true 来自这两种方法。但这似乎只是为了改变一个小细节而复制了很多原生行为;如果我能以某种方式让 tableView 在用户启动选择或取消选择时默认传递animated: true,我可以保存一个委托实现并让我的代码更直观地阅读(至少对我而言)。有什么办法可以让 tableViews 做到这一点?

编辑:更不用说,从didSelectdidDeselect 委托方法显式调用setSelected 并没有真正起作用,因为它仍然被tableView调用。 p>

【问题讨论】:

    标签: ios swift uitableview uikit


    【解决方案1】:

    我假设您正在选择单元格

    cell.isSelected = true
    

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

    如您所见,使用 isSelected 的动画过渡默认为 false。

    试试这个:

    cell.setSelected(true, animated: true)
    

    Documentation

    【讨论】:

    • 我实际上是在谈论当用户点击一个单元格时会发生什么。我自己不运行任何代码; tableView 检测到点击,并使用我似乎无法控制的参数自动调用setSelected
    • 如果我理解正确,您需要使用正确的参数调用 super。试试这个:覆盖 func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: true) }
    • 不,我不是这个意思。我想使用 animated 来决定我的setSelected 的自定义版本是否应该执行动画。所以我希望 tableView 在我点击一个单元格时用animated = true 调用。我看不出我在setSelected 的实现中所做的任何更改将如何影响它被调用的参数。这么说吧:setSelected 是自动调用的(不是我自己调用的),但总是用animated = false 调用。我可以做点什么让它被 tableView 用animated = true 调用(而不是我自己调用它)吗?
    • 只是为了了解上下文,您是否希望在选择单元格时动画= true,在未选择时动画= false?默认情况下,这是您覆盖的 setSelected,对吗?
    • 当我通过点击它选择或取消选择一个单元格时我想要animated=true,当滚动时重复使用单元格时我想要animated=false。
    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多