我有一个DynamicTableView,每个Cell都有一个ImageView。如何知道indexPath.row?
进行操作我知道的唯一方法是创建一个TapGestureRecognizer - 这有效,但我不知道我点击了哪一行。
所以我需要TableView中的DidSelectRowAt:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {}
只有当我按ImageView而不是整行时才会发生此操作,因此我无法使用TableView中的DidSelectRowAt。
这就是我现在所做的:
class DownloadsViewController: UITableViewController {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let tap = UITapGestureRecognizer(target: self, action: #selector(DownloadsViewController.tappedMe))
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DownloadsViewCell
cell.fileInfo.image = UIImage(named: "detail1")
cell.fileInfo.addGestureRecognizer(tap)
cell.fileInfo.isUserInteractionEnabled = true
}
func tappedMe(){
print(arrayDocuments(IndexPath.row))
}
}
我的整个DownloadViewContoller类代码is here
我的DownloadViewCell屏幕截图is here
有没有人有想法?
谢谢!
答案 0 :(得分:2)
向您的单元格添加属性:var indexPath: IndexPath
。
在cellForRowAtIndexPath:
执行cell.indexPath = indexPath
在您的单元格子类中,将tapGestureRecognizer
添加到UIImageView
,触发单元子类中的方法。
为您的手机制作委托协议:
protocol YourCellDelegate: class {
func imagePressed(indexPath: IndexPath)
}
让ViewController采用此协议。
weak var delegate: YourCellDelegate?
cellForRowAtIndexPath:
执行cell.delegate = self
delegate?.imagePressed(indexPath: indexPath)
imagePressed
方法调用。答案 1 :(得分:0)
你是否试图通过
获取细胞recognizer.view
点击手势方法和
func indexPath(for cell: UITableViewCell) -> IndexPath?
返回一个索引路径,表示给定表视图单元格的行和部分。
答案 2 :(得分:0)
这是一个使用自定义UIImageView
子类的解决方案。
UIImageView
的子类 - MyImageView
(或更合适的其他内容)MyImageViewDelegate
myImageViewTapped(imageView: MyImageView)
touchesEnded
方法以调用委托方法MyImageView
的{{1}}中添加一个属性,用于存储此图像视图所在单元格的索引路径。indexPath
代替常规MyImageView
。UIImageView
的代理设置为MyImageView
,即VC。self
设为true isUserInteractionEnabled
中,将图片视图的cellForRowAtIndexPath
设置为indexPath
参数indexPath
知道点击了哪个图片视图!答案 3 :(得分:0)
只需像以前一样设置ImageView,然后只需在其上添加一个空白按钮,并使用来自Ilya V.的回答中的方法和IBAction
答案 4 :(得分:0)
您可以使用属性“ tag” imageView保存indexPath.row并稍后在选择器中使用它
class DownloadsViewController: UITableViewController {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DownloadsViewCell
cell.fileInfo.image = UIImage(named: "detail1")
cell.fileInfo.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(tappedMe(_ :)))
cell.fileInfo.addGestureRecognizer(tap)
}
@objc func tappedMe(_ sender: AnyObject){
print("Tap to imageView in cell No. - \(sender.view.tag)")
}
}