首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:使用Slider更新PageView中的PageView数据

Swift:使用Slider更新PageView中的PageView数据
EN

Stack Overflow用户
提问于 2021-01-05 08:42:14
回答 1查看 153关注 0票数 0

我有一个带有主视图控制器和页视图控制器的项目,它们都是可见的(参见图像)。

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

  • DataViewController:用于页面视图data
  • TableViewCell (包括xib):为主视图构建表视图cell
  • MainViewController:,包含滑块

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

在TableViewCell中:

代码语言:javascript
复制
    @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中:

代码语言:javascript
复制
...
    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中:

代码语言:javascript
复制
    @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中的表视图不使用新值进行更新。任何建议都很感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-05 08:50:47

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65575566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档