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

时间:2018-01-08 09:59:15

标签: ios swift uitableview

我正在构建一个使用tableViewcollectionView来查看已保存的模因的模因生成器。当用户点击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 个答案:

答案 0 :(得分:2)

您必须使用UINavigationController来推动控制器。

第二件事你不能从TableView didSelect方法将图像设置为DetailsViewController

相反,您可以将此图像传递给DetailsViewController并在特定控制器中设置此图像。

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

DetailsViewController中这样做

class DetailsViewController: UIViewController {

  //Add one memeImage variable
  var memeImage: UIImage?

  override func viewDidLoad() {
        super.viewDidLoad()

       detailsImageView.image = memeImage
    }
}