我有一个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/