我有一个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'没有会员&故事板'
我可以使用任何替代参数或其他可以完成任务的其他参数吗?
提前致谢。
答案 0 :(得分:3)
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)
答案 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()