【问题标题】:Create IBAction for CollectionViewCell为 CollectionViewCell 创建 IBAction
【发布时间】:2017-04-17 16:32:49
【问题描述】:

我有一个集合视图,其中包含以编程方式创建的多个单元格。当用户点击特定单元格时,我想将变量更新为不同的值。例如:单元格 1 被点击 -> var test = "cell1" ,单元格 2 被点击 var test = "cell2"。通常我只是通过从情节提要中拖动来创建一个 IBAction,但在这种情况下我不知道该怎么做。

我正在使用 Swift 3.1

【问题讨论】:

    标签: ios swift xcode uicollectionview uicollectionviewcell


    【解决方案1】:

    要为UITableViews、UICollectionViews 和其他显示数据集合的视图添加交互性,您不能使用 Storyboard 操作,因为内容是在运行时动态生成的,而 Storyboard 只能为静态内容工作。

    相反,您需要将UICollectionViewdelegate 属性设置为实现UICollectionViewDelegate 协议的对象。作为协议的一部分定义的方法之一是collectionView(_:didSelectItemAt:) 方法。每当用户选择(点击)带有IndexPath 到该单元格作为参数的集合视图单元格时,都会调用此方法。您可以使用该方法更新您的变量。只需记住在您的UICollectionView 上使用deselectItem(at:) 方法在处理点击后取消选择单元格。

    【讨论】:

      【解决方案2】:

      您需要实现 UICollectionView 委托。是这样的

      在索引路径选择项目将给出被选择单元格的索引路径。使用 indexpath 或您正在使用的数据源数组的任何其他属性,您可以修改变量值。

      override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
          if let cell = collectionView.cellForItemAtIndexPath(indexPath) {
               //check your condition and modify the variable value depending on index path or any other property you are referring to.
          }
      }
      

      【讨论】:

      • 虽然您的答案是正确的,但它使用了 Swift 2 方法名称。比如collectionView(_:didSelectItemAtIndexPath:)方法改成collectionView(_:didSelectItemAt:)cellForItemAtIndexPath方法改成cellForItem(at:)
      • @PedroCastilho 感谢您添加 Swift 3 代码。诺兰,如果你也提到语言就好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多