代码之家  ›  专栏  ›  技术社区  ›  Andrew Tuzson

从didSelectRow方法中以编程方式推送新的视图控制器

  •  0
  • Andrew Tuzson  · 技术社区  · 8 年前

    我正在构建一个模因生成器,它使用 tableView 和a collectionView 用于查看保存的Meme。当用户点击tableView中的一个单元格时,应该通过从以前的控制器滑动视图来显示图像,而不是以新视图的形式显示图像,情况就是这样。这是我的当前代码

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let meme = memes[indexPath.row]
            let detailController = UIStoryboard(name: "DetailsStoryboard", bundle: nil).instantiateViewController(withIdentifier: "DetailsViewController") as! DetailsViewController
            present(detailController, animated: true, completion: nil)
            detailController.detailsImageView.image = meme.memedImage
        }
    

    我发现的一切都取决于使用segue,而我不是。我可以在didSelectRow方法中使用segue吗? Here 是指向回购的链接。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Jaydeep Vora    8 年前

    你必须使用 UINavigationController 推动控制器。

    第二件事你不能设置图像 DetailsViewController 从TableView中选择方法。

    相反,您可以将此图像传递给 详细信息查看控制器 并在特定控制器中设置此图像。

     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
                let meme = memes[indexPath.row]
                let detailController = UIStoryboard(name: "DetailsStoryboard", bundle: nil).instantiateViewController(withIdentifier: "DetailsViewController") as! DetailsViewController
               detailController.memeImage = meme.memedImage //Pass image like this
                self.navigationController?.pushViewController(detailController, animated: true)           
            }
    

    在里面 详细信息查看控制器 像这样做

    class DetailsViewController: UIViewController {
    
      //Add one memeImage variable
      var memeImage: UIImage?
    
      override func viewDidLoad() {
            super.viewDidLoad()
    
           detailsImageView.image = memeImage
        }
    }