如何从tableViewCell的类中回调tableView的类中的函数

时间:2017-02-16 03:56:28

标签: ios swift uitableview callback

我有一个TableView。在那个tableView中,我定制了它的单元格 like this

在这个单元格中我有两部分。图像和TextField。 它看起来像Facebook的帖子状态。当我点击图片时,我想打开一个新的ViewController和TextField

相同

但我有一个问题,我无法从我的手机类文件中调用segue。

  1. 我可以通过TableViewController's classTableViewCell's class调用某个函数吗?
  2. 我知道我可以使用delegate,但我不太喜欢这种方式,因为如果我这样做,我必须在我的项目中设置很多delegate。< / p>

    1. 有没有更好的方法直接从TableViewCell's class
    2. 展示新的ViewController

3 个答案:

答案 0 :(得分:0)

使用委托是解决问题的一种非常好的方法。

如果您不喜欢该解决方案,那么您可以设计一个具有由视图控制器设置的闭包属性的表视图单元格,并在按下该按钮时调用该闭包。

编辑:

另一种方法是在自定义单元格中将按钮操作留空,但仍然将插座连接到按钮。

然后在您的cellForRow(at:)方法中,安装以您的视图控制器为目标的IBAction。 (感谢@SoanSani,答案如下)

在那个IBAction方法中,你可以使用按钮的坐标来找出包含被点击的按钮的单元格帽子的indexPath。

我已经为UITableView创建了一个扩展,可以让你找出包含任何视图的单元格。代码如下:

import UIKit

public extension UITableView {

  /**
  This method returns the indexPath of the cell that contains the specified view

   - Parameter view: The view to find.

   - Returns: The indexPath of the cell containing the view, or nil if it can't be found

  */

  func indexPathForView(_ view: UIView) -> IndexPath? {
    let origin = view.bounds.origin
    let viewOrigin = self.convert(origin, from: view)
    let indexPath = self.indexPathForRow(at: viewOrigin)
    return indexPath
  }
}

答案 1 :(得分:0)

您可以使用委托,但如果您不想使用委托

在设置单元格添加目标到按钮tableViewController类时,然后您可以在tableview类而不是单元类中接收所有事件。

但是这需要添加标签,您可以使用这些标签来区分单击单元格中的哪个按钮

目标C代码

   [OkBtn addTarget:self action:@selector(okButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

Swift Code

   OkBtn.addTarget(self, action: #selector(ViewController.okButtonTapped), for: .TouchUpInside)

答案 2 :(得分:0)

我想你可以使用“block(Objective-c)”或“closure(Swift)”来回电