使用UITableviewcell
类显示表列表的单元格。我想使用“ navigationController?.pushViewController
”从一个屏幕重定向到另一个屏幕,但表单元格类中不支持该屏幕。因此,如何使用pushViewController从表单元格中移动UIViewcontroller
。
我的代码是:
class TableCell: UITableViewCell
{
let storyBoard : UIStoryboard = UIStoryboard(name: "SubMain", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "DetailReport") as! DetailReport
nextViewController.aryOfResultList = aryForCreateJSONResult
cell.inputViewController?.navigationController?.pushViewController(nextViewController, animated: true)
}
但是它不起作用。请给我我的问题的解决方法
答案 0 :(得分:2)
您始终可以使用导航控制器从一个视图控制器导航到另一个视图控制器,而表视图单元格不是UIViewController
类型,而是UIView
类型。
您可以在自定义表格视图单元格中创建委托,这将确认UIViewController
并在视图控制器中实现单元委托的方法。
或者您可以导航到其他屏幕,然后在表格视图中点击单元格。
答案 1 :(得分:0)
在名为var parent: UIViewController?
的单元格中声明一个变量。
在父控制器的cellForRow
函数中,
cell.parent = self
现在可以在单元格中致电
parent?.navigationController.pushViewController
更新 如果您只是想在粘贴单元格时按下视图控制器,则可以在以下位置的父控制器中执行此操作:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.navigationController?.pushViewController(nextViewController, animated: true)
}
答案 2 :(得分:0)
从辅助函数中获取ViewController:
extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}
,然后在您的自定义单元格中,使用parentViewController.navigationController
您可以将其用于所有UIView
类型。
答案 3 :(得分:0)
您必须将pushViewController
代码分配到tableView didSelectRowAt()
方法中
例如
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let storyBoard : UIStoryboard = UIStoryboard(name: "SubMain", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "DetailReport") as! DetailReport
navigationController?.pushViewController(nextViewController, animated: true)
}