在单元格中点击图像视图时如何转到其他视图

How to go to other view when tapped imageview in a cell

我有一个使用自定义单元格 (xib) 的 table 视图。

此自定义单元格有图像和说明。 如果用户点击图像(不是单元格),它应该显示其他 page/view.

这是点击图片时调用的函数

@objc func imageTapped(){
    let sb = UIStoryboard(name: "SbIdentifier", bundle: nil)
    let vc = sb.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
    print("image tapped")
    //self.window?.rootViewController?.parent?.navigationController?.pushViewController(vc, animated: true)
 }

我尝试使用推送视图控制器但没有任何反应。

RootViewController 没有父级,父级肯定没有 navigationController。如果 navigationController 是层次结构中的第一个 viewController,您可以尝试:

(self.window?.rootViewController as? UINavigationController)?.pushViewController(vc, animated: true)

您可以在此处使用 delegate pattern 来处理点击 tableViewCell 中的个人资料图像以推送 ProfileViewController。

首先创建 CellImageTappableDelegate 协议

protocol CellImageTappableDelegate: class {
    func didTapProfileImage(with imageUrl: String)
}

然后在您的 CustomCell

中创建委托 属性
weak var imageTapDelegate: CellImageTappableDelegate?

现在在 UIImageView

上启用 isUserInteractionEnabled 属性
image.isUserInteractionEnabled = true

然后将 tapGestureRecognizer 添加到您的 imageView 并实现选择器

let tapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: #selector(CustomProfileCell.didTapProfileImage(_:)))
        profileImageView.addGestureRecognizer(tapGestureRecognizer)

func didTapProfileImage(_ tapGesture: UITapGestureRecognizer) {
     self.imageTapDelegate?.didTapProfileImage(with: self.profileImageUrl)
}

在您的 UIViewController 子类中的 tableView 数据源 cellForRowAt: 方法中,将委托分配给 self 并实现协议方法

cell.imageTapDelegate = self

func didTapProfileImage(with imageUrl: String) {
   print("Profile image tapped")
   let storyboard = UIStoryboard(name: "SbIdentifier", bundle: nil)
   let profileVC = storyboard.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
   profileVC.imageUrl = imageUrl
   self.navigationController?.pushViewController(profileVC, animated: true)
}