我有一个TableView。在那个tableView中,我自定义了单元格
like this

在这个单元格中,我有2部分。图像和文本字段。
看起来像Facebook的职位状态。当我单击图像时,我想打开一个新的ViewController,并为TextField打开一个相同的控件

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


有什么方法可以从TableViewController's class调用TableViewCell's class中的函数?


我知道我可以使用delegate,但是我不太喜欢这种方式,因为如果这样做,我必须在项目中设置很多delegate


是否有更好的方法直接从TableViewCell's class呈现新的ViewController

最佳答案

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

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

编辑:

另一种选择是在自定义单元中将按钮动作保留为空,但仍将插座连接到按钮。

然后,在您的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
  }
}

关于ios - 如何从tableViewCell的类中回调tableView的类中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42264628/

10-15 14:49