将新的视图控制器推送到导航控制器时,我会返回与我点击的相同的视图控制器,而不是新的视图控制器

问题描述 投票:0回答:1

我有一个 UIViewController,其中添加了一个 UITableView 作为子视图。当我点击一个单元格以返回一个新的 UIViewController(详细视图控制器,除了背景颜色之外为空)时,我会返回相同的起始视图控制器和表格视图。

我正在使用navigationController.pushViewController(),但我对present()有同样的问题。我相信我调用了错误的视图控制器,但是当使用调试视图层次结构时,我的详细视图控制器似乎是主视图控制器的副本。我不明白为什么,因为详细视图控制器大部分是空的。我还确信我已正确设置场景委托,并将导航控制器设置为根视图。

这是tableView代码,变量“countries”是一个字符串数组。我尝试过使用 self.navigationController?.pushViewController() ,但没有任何变化。


extension ViewController : UITableViewDelegate, UITableViewDataSource {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return countries.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: FlagCell.identifier, for: indexPath) as! FlagCell
        let country = countries[indexPath.row]
        let image = UIImage(named: country)
        cell.flagImageView.image = image
        cell.countryNameLabel.text = country
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 80
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let vc = FlagViewController()
        navigationController?.pushViewController(vc, animated: true)
    }
}

这是详细视图控制器的代码。

import UIKit

class FlagViewController: ViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .systemMint
    }
}
swift uitableview uiviewcontroller uikit
1个回答
0
投票

这行可能是您的问题:

let vc = FlagViewController()

如果您创建这样的视图控制器,它不会从故事板或 nib 文件获取视图。我知道通过调用不带参数的初始化程序来创建视图控制器的唯一方法是,视图控制器实现

loadView()
方法并在代码中构建其视图层次结构。

除非您在代码中创建了

FlagViewController
的视图层次结构,否则您可能需要使用
UIStoryboard
方法
instantiateViewController(withIdentifier:)
从故事板加载它。

© www.soinside.com 2019 - 2024. All rights reserved.