如何在单元格Swift中使用pushViewController

问题描述 投票:1回答:4

我有一个viewController,我有一个tableview,在每个单元格里面我都有一个collectionView。

我想转到另一个视图(我将有一个后退按钮),所以我尝试使用我的代码,该代码适用于其他视图:

let vc =  self.storyboard?.instantiateViewController(withIdentifier: "detail") as! DetailView
    vc.name = beachesNames[indexPath.row]
    vc.imagak = imagesNames[indexPath.row]
    self.navigationController?.pushViewController(vc, animated: true)

但是因为这段代码在TableViewCell里面,我有一个错误,上面写着:

“HomeViewCell”类型的值没有成员'storyboard'

有没有我可以使用的替代参数或其他可以完成我的任务的东西?

提前致谢。

ios swift swift3
4个回答
3
投票

- swift 3

let detailOrderVC = UIViewController()
self.viewController()?.navigationController?.pushViewController(detailOrderVC, animated: true)

- swift 4

在swift 4中,你需要将viewcontroller传递给单元格,如下所示

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! CustomTableViewCell

    // some your logic
    cell.viewController = self // CustomTableViewCell needs to have viewController member variable

    return cell
}
let detailOrderVC = UIViewController()
self.viewController?.navigationController?.pushViewController(detailOrderVC, animated: true)

0
投票

如果你在每个单元格内都有一个集合视图,那么我建议让每个单元格都有一个容器视图。与容器视图关联的视图控制器将具有故事板。

推送的代码看起来有点难看:

self.parent?.navigationController?.pushViewController(vc, animated: true)

parent?.从包含的视图控制器转到父视图控制器。


0
投票

您缺少的是实例化故事板:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
storyboard.instantiateViewControllerWithIdentifier("myNavigationController") as! UINavigationController

但正如stackoverflow answer所说,这通常不是一个好的MVC设计。

您可能希望查看委托模式或使用NotificationCenter。这两种方式实质上都会触发对父视图的调用,然后父视图将处理相应的操作。


0
投票

如果要推送到需要布局的视图类,则必须同时调用布局。恩。

 let layout = UICollectionViewFlowLayout()
 let nextViewclass = NextClass(collectionViewLayout: layout)
 self.navigationController?.pushViewController(nextViewclass, animated: true)
© www.soinside.com 2019 - 2024. All rights reserved.