如何在TableCell类中使用navigationController.pushViewController?

时间:2019-05-08 11:18:55

标签: ios swift uitableview uinavigationcontroller pushviewcontroller

使用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)

}

但是它不起作用。请给我我的问题的解决方法

4 个答案:

答案 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)
 }