【问题标题】:Handling button interaction of a dequeueReusableCell in iOS Swift在 iOS Swift 中处理 dequeueReusableCell 的按钮交互
【发布时间】:2015-03-01 21:55:05
【问题描述】:

我正在制作一个依赖于表格视图的 iOS 应用。在表格视图的每个单元格中,底部对齐有 4 个按钮。我有一个非常标准的单元格类和一个 feedController 来处理表格并设置单元格的所有项目。

一切正常,但我不知道如何处理单元格内的按钮点击。我可以将它硬编码到我的单元格类中,但是每 3 个单元格都有相同的交互。有没有办法将按钮单击功能从单元类传递到控制器?我试过检查控制器的状态,但没有奏效。

【问题讨论】:

  • 在cellForRowAtIndexPath中使用addTarget:action:forControlEvents:,并将target设置为self(即控制器),然后在控制器中实现按钮的action方法。
  • addTarget:action:forControlEvents 方法的问题是该动作只接收按钮,所以你不知道哪个单元格。您还对单元格如何在表格视图控制器中呈现数据的理解进行了硬编码。最好让您的单元格提供阻止或委托调用,您可以控制单元格可以传递的信息。或者只是在块/委托中传递单元格本身。看我的回答。

标签: ios iphone xcode swift ios8


【解决方案1】:

您可以在执行 cellForItemAtIndexPath 时添加手势识别器吗?所以我对集合视图有类似的东西,我所做的就是:

 func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell!
    {
        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as MyCollectionView
...

我会为每个单元格添加一个手势识别器

cell.addGestureRecognizer(UITapGestureRecognizer(target: self, action:Selector("tapAction:")))

然后是这样的:

 func tapAction(recognizer: UITapGestureRecognizer) {
   ...
}

所以识别器最终是被点击的特定项目,我可以采取相应的行动(在我的情况下,我有我的项目数据源,我会通过将识别器转换为单元格来找到数组中的项目,找到适当的子视图,并更新其上的值)

【讨论】:

    【解决方案2】:

    我会将代码块属性添加到您的单元格类中,表格可以分配这些属性来处理每个按钮。在您的单元格中,对每个按钮处理程序进行编码以调用相应的块,或为单个块中使用的按钮传递一个索引。

    在此处查看我的答案,其中有一个示例,但用于切换。

    How can I get index path of cell on switch change event in section based table view

    【讨论】:

    • 我喜欢这种方法,我认为这是正确的方法,我只是不确定如何使用 swift 来做到这一点,因为它没有 @property :/ 我读过一些关于闭包的东西,但我不是太确定如何让他们使用这个
    • 似乎 swift 没有属性,并且 'var' 是等价的。请参见此处:stackoverflow.com/questions/24014800/…。因此,只需将块分配给 var,您就可以开始运行了。
    【解决方案3】:

    如果在几个单元格之后您得到相同的交互,这可能是因为您将一个可重复使用的单元格出列,而您得到的是同一个单元格。 每次单元格出列时,请确保为 tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) 数据源中的按钮设置 .setTarget() 调用。如果您分享您如何处理出队以查看这是否是您的问题,将会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多