在单元格中点击图像视图时如何转到其他视图
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)
}
我有一个使用自定义单元格 (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)
}