斯威夫特 5; pushViewController 不工作

时间:2021-02-05 14:43:50

标签: swift navigationcontroller

我正在测试 Swift,我创建了一个表格列表来显示 JSON 数据,现在我想显示每个单元格的详细信息,点击它,进入一个新的视图控制器。

测试应用程序我点击了单元格,但我没有看到新的视图。

这是将点击捕获到 ViewController.swift 中的代码:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
  {
  
  private let tableView: UITableView = {
    let table = UITableView(frame: .zero,
                            style: .grouped)
    table.register(UITableViewCell.self,
                   forCellReuseIdentifier: "cell")
    return table
}()

 private let tableView: UITableView = {
    let table = UITableView(frame: .zero,
                            style: .grouped)
    table.register(UITableViewCell.self,
                   forCellReuseIdentifier: "cell")
    return table
 }()

  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
   
    parseJSON()
    view.addSubview(tableView)
    tableView.frame = view.bounds
    tableView.delegate = self
    tableView.dataSource = self
    
  }

  ....

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController {
        vc.selectedImage = "images/logo_2-mini.png"
        print("Click \(indexPath)   " + vc.selectedImage!) // I see it!
    
        navigationController?.pushViewController(vc, animated: true) // I don't see it
    }
  }
}

这是DetailViewController

import UIKit

 class DetailViewController: UIViewController {

 @IBOutlet weak var imageView: UIImageView!
 var selectedImage: String?

 override func viewDidLoad() {
    super.viewDidLoad()
    print("Pre")

    if let imageToLoad = selectedImage{
        imageView.image = UIImage(named: imageToLoad)
    print("ok")
    }
 }
}

我对 swift 太陌生了!你能帮我吗?

1 个答案:

答案 0 :(得分:1)

如果您想显示 DetailViewController,您应该将代码更改为

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let vc = storyboard.instantiateViewController(withIdentifier: "Detail") as? DetailViewController else { return }
    
    vc.selectedImage = "images/logo_2-mini.png"
    print("Click \(indexPath)   " + vc.selectedImage!) // I see it!
    
    self.present(vc, animated: true)
  }

这样您就无需将 ViewController 嵌入到导航控制器中。

另外,我创建了 storyboard 变量,因为我没有在您的代码中看到它的声明。