我已经尝试解决这个问题有一段时间了,经过几个小时的寻找解决方案后,我决定是时候问了。
我有一个由自定义 UITableViewCells 填充的表格视图,当前当您点击单元格时,它会将您带到详细视图。
自定义单元格内有一个图像,我希望用户能够点击该图像并转到显示该图像的弹出窗口 VC。
我遇到的问题是在点击图像时创建segue。
在自定义单元格的文件中,我在图像上设置了点击手势识别器(pTap):
override func awakeFromNib() {
super.awakeFromNib()
let tap = UITapGestureRecognizer(target: self, action: #selector(PostCell.voteTapped(_:)))
let ptap = UITapGestureRecognizer(target: self, action: #selector(PostCell.imageTapped(_:)))
tap.numberOfTapsRequired = 1
ptap.numberOfTapsRequired = 1
voteImage.addGestureRecognizer(tap)
voteImage.userInteractionEnabled = true
featuredImg.addGestureRecognizer(ptap)
featuredImg.userInteractionEnabled = true
}
我在自定义单元格文件中还有一个用于水龙头的函数:
func imageTapped(sender: UIGestureRecognizer) {
print("image tapped")
}
在我的视图控制器文件中,我在索引路径的 did select row 中添加了一个 segue:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let post: Post!
if inSearchMode {
post = filteredVenues[indexPath.row]
} else {
post = posts[indexPath.row]
}
print(post?.venueName)
performSegueWithIdentifier("imageTapped", sender: nil)
performSegueWithIdentifier("DetailsVC", sender: post)
}
另外,在故事板中,我创建了一个从 VC 到 VC 的 Segue,该 VC 保存带有自定义单元格的表格视图,到我想在点击图像时显示的 VC。
我尝试了几种不同的方法来使其工作,但没有任何运气,您在上面看到的代码是我多次失败的尝试后剩下的。我觉得自定义单元文件中的 tap 功能和 VC 文件中的 segue 是解决方案的一部分,所以这就是我保留它们的原因。
任何帮助,将不胜感激。谢谢!
更新以下答案中的代码:
添加协议
protocol ImageSegueProtocol: class {
func imageTapped(row: Int)
}
class PostCell: UITableViewCell {
添加IAB功能
@IBAction func imageTapped(sender: UIGestureRecognizer) {
guard let row = row else { return }
delegate?.imageTapped(row)
print("image tapped func")
}
在主 VC 中声明的委托
weak var delegate:postCell?
指定代表
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//let post = posts[indexPath.row]
if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell {
var img: UIImage?
var vImg: UIImage?
postCell?.delegate = self
新增扩展功能
extension FeedVC: ImageSegueProtocol {
func imageTapped(row: Int) {
if inSearchMode == true {
let object = filteredVenues[row]
performSegueWithIdentifier("imageTapped", sender: object)
print("ext func")
} else {
let object = posts[row]
performSegueWithIdentifier("imageTapped", sender: object)
print("ext func")
}
}