我有一个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'
有没有我可以使用的替代参数或其他可以完成我的任务的东西?
提前致谢。
let detailOrderVC = UIViewController()
self.viewController()?.navigationController?.pushViewController(detailOrderVC, animated: true)
在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)
如果你在每个单元格内都有一个集合视图,那么我建议让每个单元格都有一个容器视图。与容器视图关联的视图控制器将具有故事板。
推送的代码看起来有点难看:
self.parent?.navigationController?.pushViewController(vc, animated: true)
parent?.
从包含的视图控制器转到父视图控制器。
您缺少的是实例化故事板:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
storyboard.instantiateViewControllerWithIdentifier("myNavigationController") as! UINavigationController
但正如stackoverflow answer所说,这通常不是一个好的MVC设计。
您可能希望查看委托模式或使用NotificationCenter。这两种方式实质上都会触发对父视图的调用,然后父视图将处理相应的操作。
如果要推送到需要布局的视图类,则必须同时调用布局。恩。
let layout = UICollectionViewFlowLayout()
let nextViewclass = NextClass(collectionViewLayout: layout)
self.navigationController?.pushViewController(nextViewclass, animated: true)