Segue 未从自定义 tableView 单元格触发

Posted

技术标签:

【中文标题】Segue 未从自定义 tableView 单元格触发【英文标题】:Segue not firing from custom tableView cell 【发布时间】:2018-08-11 16:11:19 【问题描述】:

我正在经历我确信是初学者的错误。我有一个 TableViewController,它应该在选择自定义单元格后继续使用第二个 TableViewController。

我过去曾从自定义单元格中转到 UIViewController,但我终其一生都无法弄清楚为什么此 segue 没有触发。这是应该触发 segue 的整个控制器的代码。提前致谢!

import UIKit

class SourcesViewController: UITableViewController 

var sources: [Source] = []

override func viewDidLoad() 
    super.viewDidLoad()
    navigationController?.isNavigationBarHidden = false
    self.navigationItem .setHidesBackButton(true, animated: false)


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.





// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int 
    return 1


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return sources.count


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell_01", for: indexPath) as? SourceCell

        else 
            return tableView.dequeueReusableCell(withIdentifier: "cell_01", for: indexPath)
    

    let currentSource = sources[indexPath.row]

    cell.sourceLabel.text = currentSource.name

    return cell





// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if let indexPath = tableView.indexPathForSelectedRow 
        let sourceToSend = sources[indexPath.row]
        if let destination = segue.destination as? ArticlesViewController 
            destination.source = sourceToSend
        
    
  


【问题讨论】:

【参考方案1】:

你的 segue 没有被调用,因为你没有调用它。 UIViewController 有 perfromSegue 方法,你应该使用它来达到这个目的。

据我所知,您希望在点击单元格后执行转场。要实现这一点,请添加 UITableViewDelegate 方法并从那里执行 segue:

/// - SeeAlso: UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    performSegue(withIdentifier: "your_identifier_from_the_storyboard", sender: nil)

【讨论】:

这显然是在正确的轨道上。我已经添加了建议的代码,断点显示调用正在被命中,但仍然没有 segue。请多多包涵。我是 tableViews 的新手。我还在没有触发的目标视图控制器中抛出了一个控制台打印命令,所以我相当有信心 segue 仍然没有触发。 除此之外,您还可以尝试在情节提要中创建整个内容。您可以直接从您的单元格创建 segue 到新控制器,它的作用与 didSelectRowAt 方法完全相同。 我已经尝试了这两种方法,segue 似乎正在触发,但目标视图仍然无法加载。 :-/

以上是关于Segue 未从自定义 tableView 单元格触发的主要内容,如果未能解决你的问题,请参考以下文章

如何从自定义集合视图单元(使用 xib 创建的单元)到 tabBar 控制器创建自定义 segue

无法从自定义表格视图单元格按钮中删除行

从自定义单元格访问父视图

从自定义单元格重新加载表格视图数据

未从自定义 uitableviewcell 调用 prepareForSegue

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