【问题标题】:Swift 5; pushViewController is not working斯威夫特 5; pushViewController 不工作
【发布时间】:2021-02-05 14:43:50
【问题描述】:

我正在测试 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 的新手!你能帮帮我吗?

【问题讨论】:

  • 您确定 ViewController 是导航堆栈的一部分吗?
  • self.navigationController?.viewControllers 看起来是空的...
  • “看起来是空的”?不,最好问(更明确):self.navigationController nil 吗?
  • 是的,它是nil
  • 请将您的视图控制器嵌入到导航控制器中

标签: swift navigationcontroller


【解决方案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 变量,因为我在您的代码中没有看到它的声明。

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2017-07-22
    • 2017-03-24
    相关资源
    最近更新 更多