如果重写collectionView moveItemAt,则UIButton行为会发生更改

时间:2018-01-10 17:21:32

标签: ios uibutton uicollectionview

我有一个集合视图控制器。其中一个集合视图的单元格包含一个按下触摸和触摸内部的按钮。

严格地说,该按钮位于视图控制器的视图中,视图控制器是集合视图单元的子视图。

按下按钮时会触发Touch Down,当释放按钮时,Touch Up Inside会被触发。在按钮未释放之前,按钮呈灰色,并且不会触发Touch Up Inside。

这正是我需要的行为。

现在,我已经实现了这两种方法来支持重新排序集合视图的单元格:

func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool

func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) 

如果实现了第二种方法(如果canMoveItemAt返回true或false),则按钮行为会发生变化:

  • 按下该按钮后,立即触发Touch Down事件,然后立即触发Touch Up Inside事件。

    • 按下该按钮时呈灰色,并立即恢复到正常状态,就像它已被释放一样

    • 释放按钮时,没有任何反应

我怀疑是事件从按钮传播到集合视图控制器,但我不知道如何阻止它。

任何人都可以帮助我吗?

韩国社交协会

1 个答案:

答案 0 :(得分:0)

你是对的,但如果你停止它,你也会停止重新排序。基本上你需要选择你需要的东西:按下按钮或拖动单元格。也许你可以利用Collection cell功能而不是按钮来实现预期的行为。如果需要按钮来表示正在拖动单元格,则可以轻松更改按钮状态。