【问题标题】:How to use navigationController.pushViewController in TableCell class? [duplicate]如何在 TableCell 类中使用 navigationController.pushViewController? [复制]
【发布时间】:2019-09-26 02:49:24
【问题描述】:

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

}

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

【问题讨论】:

  • 你想在点击表格视图单元格时执行navigationController吗?.pushViewController?
  • 是的,我想在点击表格视图单元格时执行 navigationController?.pushViewController
  • 在 didSelectRowAt indexPath 方法中添加 navigationController?.pushViewController
  • 在 didSelectRowAt indexPath 方法中是的
  • @BhavishaKhatri 请检查我的答案

标签: ios swift uitableview uinavigationcontroller pushviewcontroller


【解决方案1】:

您必须将 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)
 }

【讨论】:

    【解决方案2】:

    在名为var parent: UIViewController? 的单元格中声明一个变量。 在父控制器中,在函数cellForRow中,

    cell.parent = self
    

    现在你可以在单元格中调用

    parent?.navigationController.pushViewController
    

    更新 如果您想要的只是在录制单元格时推送视图控制器,您可以在父控制器中执行此操作:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
         self.navigationController?.pushViewController(nextViewController, animated: true)    
    }
    

    【讨论】:

      【解决方案3】:

      从辅助函数中获取 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 类型。

      【讨论】:

        【解决方案4】:

        您始终可以使用导航控制器从一个视图控制器导航到另一个视图控制器,并且表格视图单元不是UIViewController 类型,而是UIView 类型。

        您可以在自定义表格视图单元格中创建一个委托,这将确认 UIViewController 并在视图控制器中实现单元格委托的方法。

        或者您可以导航到其他屏幕,然后在表格视图中点击单元格。

        【讨论】:

        • 请分享代码,让我有更好的想法
        • @BhavishaKhatri no ios developer doesn't know didSelectRowAt 你的问题是错过理解你需要从单元格内的特定操作导航,你是否仍然发现无法查看重复项并阅读其他在这里回答didSelectRowAt
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 2020-01-22
        相关资源
        最近更新 更多