Swift: 使用滑块更新 PageView 中的 TableView 数据

Swift: Update TableView Data in PageView Using Slider

我有一个包含主视图控制器和页面视图控制器的项目,它们都始终可见(见图)

主视图控制器包含一个滑块,页面视图控制器包含几个页面,每个页面都有一个 table 视图实例。查看控制器:

我的问题是如何在用户调整 MainViewController 中的滑块时实时更新页面视图中的 table 视图。我的代码:

在 TableViewCell 中:

    @IBOutlet weak var outputLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    
    class var reuseIdentifier: String {
        return "IngredientCell"
    }
    
    class var nibName: String {
        return "IngredientTableViewCell"
    }
    
    func configureResultCell(text: String) {
        outputLabel.text = text
    }

在 DataViewController 中:

...
    var results: [String]?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        registerNib()
    }

...
}

extension DataViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let int = results?.count {
            return int
        }
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        print("cellforrowat", results)
        if let cell = tableView.dequeueReusableCell(withIdentifier: IngredientTableViewCell.reuseIdentifier, for: indexPath) as? IngredientTableViewCell {
            if let text = results?[indexPath.row] {
                cell.configureResultCell(text: text)
            }
            return cell
        }
        
        return UITableViewCell()
    }
    
}

在 MainViewController 中:

    @IBAction func sliderValueChanged(_ sender: UISlider) {
        
        guard let dataViewController = storyboard?.instantiateViewController(identifier: String(describing: DataViewController.self)) as? DataViewController else {
            return
        }
        
        dataViewController.results = [NEW_VALUES]
        DispatchQueue.main.async {
            dataViewController.tableView.reloadData()
        }
        
    }

基本上,DataViewController 中的 table 视图不会更新为新值。任何建议表示赞赏

您的错误在 MainViewController 方法中:sliderValueChanged 。您会看到每次调整滑块时都会实例化(创建)DataViewController 的新实例。为了按照您的预期工作,您必须保存所呈现的实例 DataViewController 并使用此实例而不是每次都创建一个新实例。

为了实现这一点,我建议您使用委托模式,参考此处:https://learnappmaking.com/delegation-swift-how-to/。此模式将帮助您在两个视图控制器之间安全地建立“通信”。