如何在单元格Swift中使用pushViewController

时间:2017-04-18 14:35:23

标签: ios swift swift3

我有一个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'没有会员&故事板'

我可以使用任何替代参数或其他可以完成任务的其他参数吗?

提前致谢。

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

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

from selenium import webdriver

from selenium.webdriver.ie.service import Service

orig_command_line_args = Service.command_line_args


def patch_command_line_args(self):
    args = orig_command_line_args(self)
    return args + ["--extract-path=/tmp"]

Service.command_line_args = patch_command_line_args

driver = webdriver.Ie()