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