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

主视图控制器包含一个滑块,页面视图控制器包含几个页面,每个页面都有一个表视图实例。视图控制器:
我的问题是如何在用户调整MainViewController中的滑块时实时更新页面视图中的表视图。我的代码:
在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中的表视图不使用新值进行更新。任何建议都很感激
发布于 2021-01-05 08:50:47
您的错误在于MainViewController方法:sliderValueChanged。每次调整滑块时,都会实例化(创建) DataViewController的一个新实例。为了按照您的预期工作,您必须保存呈现的DataViewController实例,并使用此实例,而不是每次创建一个新实例。
为了实现这一点,我建议您使用委托模式,在这里参考:https://learnappmaking.com/delegation-swift-how-to/。此模式将帮助您安全地在两个视图控制器之间建立“通信”。
https://stackoverflow.com/questions/65575566
复制相似问题