代码之家  ›  专栏  ›  技术社区  ›  Jim

iOS swift 4.2如何拒绝或禁止放入UICollectionView

  •  1
  • Jim  · 技术社区  · 6 年前

    我正在尝试在我的应用程序中启用拖放作为触发函数的机制。我有一个TableView可以显示用户列表,还有一个collectionView可以显示3种不同类型的数据,但一次只能显示1种类型。

    因此,当前,如果我触发的操作正在显示Type2数据,那么它只会忽略丢弃的数据—但是我想阻止CollectionView甚至接受它(如果可能的话)。我不想让用户看到一个下降是可能的视觉迹象。

    我怀疑我应该用dropProposal来做这件事,但在阅读了苹果的文档和谷歌和YouTube上几个小时的搜索之后,我完全不知所措。

    尝试 这是为了操纵collectionView.dropDelegate代理基于我显示的数据类型。我很有信心,正确的解决方案将是非常不同的-但以下是我尝试的:

    if collectionMode != "Type2" {
      collectionView.dropDelegate = self
    } else {
      collectionView.dropDelegate = nil
    }
    

    如果你能帮我指出答案,请照办。

    0 回复  |  直到 6 年前
        1
  •  0
  •   dahiya_boy    6 年前

    试试这个,

    func collectionView(_ collectionView: UICollectionView, 
            dragSessionWillBegin session: UIDragSession){
    
         guard if collectionMode == "Mode2" else { return }
         :
         :
         // Do stuff
    
    }
    
        2
  •  0
  •   Jim    6 年前

    func collectionView(_ collectionView: UICollectionView, canHandle session: UIDropSession) -> Bool {
        if self.collectionMode == "Type2" {return false}
        return true
    }
    

    Apple Documentation - collectionView(_:canHandle:)

    将逻辑添加到UICollectionViewDragDelegate的其他建议将阻止将单元格拖到任何位置—这可能是一种正常的方法,在某些情况下甚至更有效—但是,将逻辑放在drop委托中可以获得更大的灵活性,并且在有多个drop目标且并非所有目标都要删除的情况下无效。

    这个问题的正确答案由@Bill提供(谢谢!)但他把自己的回答作为评论,而不是回答。