保留特定索引的tableView数据,该数据是使用Tap手势而不是didSelectItemAt

时间:2019-05-24 07:45:22

标签: ios swift uitableview

我遇到UITableVIew的问题,可以说我有一个带有tableView的屏幕,该屏幕的 resuablecell 单元格中也包含三个图像,我想以弹出窗口以查看较大的内容,因此添加了UITapGesture,并且为了打开而我正在传递这样的图像引用,

@objc func showImage (_ sender: UITapGestureRecognizer){
        print("ImageTapped")

        let imagePopupVC: ImagePopupViewController = self.storyboard?.instantiateViewController(withIdentifier: "imagePopupVC") as! ImagePopupViewController
        imagePopupVC.isImage = true
        if popUpFeedImage != nil {
            // here this feedImage is the one i am passing to other VC
            imagePopupVC.image = popUpFeedImage
        }
        self.navigationController?.pushViewController(imagePopupVC, animated: false)
    }

在这里,我正在popUpFeedImage

中填充此cellForRowAt
 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell: MemberTableViewCell = tableView.dequeueReusableCell(withIdentifier: "MemberTableViewCell", for: indexPath) as! MemberTableViewCell
let urlString: URL = URL(string: postContent.contentURL)!
         let tap = UITapGestureRecognizer(target: self, action: #selector(showImage(_:)))
        cell.feedImageView.isUserInteractionEnabled = true
        cell.feedImageView.addGestureRecognizer(tap)

                    cell.feedImageView.sd_setImage(with: urlString, placeholderImage: nil) { (image, error, imageCacheType, url) in
                        self.popUpFeedImage = image
                    }
}

现在问题出在哪里,当此图像被填充并且我点击第一个图像时,它将打开该图像,该图像是单元格中最后一个图像(第三个图像),并且发生在最后一个显示的图像上将会显示屏幕的,现在我不知道要保留我在特定Index上点击的图像的引用, 我已经实现了didSelectItemAt来打开另一个viewController,所以我不能将其用于此特定目的。 任何帮助都会有所帮助。

1 个答案:

答案 0 :(得分:0)

您可以从手势识别器处理方法中的点击视图中获取图像:

@objc func showImage (_ sender: UITapGestureRecognizer){
    print("ImageTapped")

    guard let tappedView = sender.view else { return }

    if let imageView = tappedView as? UIImageView {
        self.popUpFeedImage = imageView.image
    } else {

        tappedView.subviews.forEach { subView in

            if subView.isKind(of: UIImageView.self) {
                self.popUpFeedImage = subView.image
            }
        }
    }

    let imagePopupVC: ImagePopupViewController = self.storyboard?.instantiateViewController(withIdentifier: "imagePopupVC") as! ImagePopupViewController
    imagePopupVC.isImage = true
    if popUpFeedImage != nil {
        // here this feedImage is the one i am passing to other VC
        imagePopupVC.image = popUpFeedImage
    }
    self.navigationController?.pushViewController(imagePopupVC, animated: false)
}

或者您可以为imageView指定标签号,而要获取图像时,只需比较点击的视图ID和imageView ID。