根据在 TableViews 自定义单元格中点击的图像执行 segue

Posted

技术标签:

【中文标题】根据在 TableViews 自定义单元格中点击的图像执行 segue【英文标题】:Perform segue depending on image tapped in TableViews custom cell 【发布时间】:2019-02-20 19:02:42 【问题描述】:

就像我对标题的问题一样简单。我正在尝试根据某人在我的表格视图上点击的图像转到另一个视图控制器。例如:如果你点击 image1 执行 segue gotoview1,如果你点击 image2 执行 segue gotoview2。

我有一个图像数组:

let gameImages = [UIImage(named: "DonkeyKong"), UIImage(named: "TRex"), UIImage(named: "SuperMarioRun"), UIImage(named: "Arcades1")]

这是我的索引单元格,我尝试使用 func imageAction 执行 segue,但应用程序会崩溃:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell

    cell.frontImage.image = gameImages[indexPath.row]
    cell.title.text = gameTitles[indexPath.row]

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "imageAction:")
    cell.frontImage.isUserInteractionEnabled = true
    cell.frontImage.addGestureRecognizer(tapGestureRecognizer)

    func imageAction(_ sender:AnyObject) 
        if cell.frontImage.image == UIImage(named: "DonkeyKong")
           performSegue(withIdentifier: "goToDonkey", sender: self)
        
    

    return cell

我有一个自定义单元格,我只是将图像链接为插座并执行一些基本修改。只是说以防万一。

【问题讨论】:

您介意在您的问题中添加崩溃日志吗?它会帮助我更好地帮助你。 2019-02-20 14:37:27.503845-0500 TestProjectGame[31865:2947281] -[TestProjectGame.FrontViewController imageAction:]:无法识别的选择器发送到实例 0x7fab56c1bb80 2019-02-20 14:37: 27.516745-0500 TestProjectGame[31865:2947281] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[TestProjectGame.FrontViewController imageAction:]:无法识别的选择器发送到实例 0x7fab56c1bb80” 【参考方案1】:

试试这个。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell
cell.imageButton.addTarget(self, action: #selector(self.imageAction(_:)), for: .touchUpInside)
cell.imageButton.tag = indexPath.row
cell.frontImage.image = gameImages[indexPath.row]
cell.title.text = gameTitles[indexPath.row]

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "imageAction:")
cell.frontImage.isUserInteractionEnabled = true
cell.frontImage.addGestureRecognizer(tapGestureRecognizer)
return cell

func imageAction(_ sender:UIButton) 
        switch sender.tag
        case 0:
            self.performSegue(withIdentifier: "goToDonkey", sender: self)
        case 1:
            performSegue(withIdentifier: "goToTRex", sender: self)
        case 2:
            performSegue(withIdentifier: "goToSuperMarioRun", sender: self)
        case 3:
            performSegue(withIdentifier: "goToArcades1", sender: self)
        default:
            break
        
    

imageAction 函数不是 self 的成员,因为它是 tableview 委托函数的一部分,而不是 self。这就是无法识别的选择器实例的原因。 但我可能会使用另一个委托重写 func,但是由于您不想使用单元格,所以只选择图像,这可能会解决您的问题。

【讨论】:

该函数在调用cell.frontImage.image时会抛出错误,我相信这是因为cell会留在函数CellForRowAt中。我尝试按照您的建议重写,但也没有运气。无论哪种方式,如果我在图像外部单击并执行 segue,didSelectRow 将起作用,我只想在点击图像而不是整个单元格时执行 segue。还是谢谢你! 那么您可以在 uiimage 上使用 UIButton 并向按钮添加目标我将使用 UIbutton 编辑我的答案以反映按钮的使用。

以上是关于根据在 TableViews 自定义单元格中点击的图像执行 segue的主要内容,如果未能解决你的问题,请参考以下文章

如何让共享按钮在 tableview 单元格中快速工作?

隐藏在模型未表示的可见单元格后面的 TableViews 单元格

根据获得的当前单元格的索引路径,自定义单元格中的按钮单击功能

当点击自定义 TableView 单元格中的 UITextField 时转到新视图

如何在使用tableViews自定义单元格时在运行时更改表视图单元格高度?

UITableViewController 自定义单元格中缺少 UIButton 默认点击淡入淡出动画