【发布时间】:2022-06-13 20:07:00
【问题描述】:
我有一个包含 UIStackView 和 UIButton 的基本视图控制器子类。每次使用组合从堆栈视图的arrangedSubviews 数组中添加或删除视图时,我都想运行一些代码。这是我失败的尝试:
import Combine
import UIKit
class ViewController: UIViewController {
@IBOutlet var stackView: UIStackView!
@IBOutlet var button: UIButton!
var cancelables = Set<AnyCancellable>()
override func viewDidLoad() {
super.viewDidLoad()
stackView.publisher(for: \.arrangedSubviews).sink { views in
button.isEnabled = views.count < 5
}
.store(in: &cancelables)
}
@IBAction func addTapped(_ sender: UIButton) {
let customView = CustomView()
stackView.addArrangedSubview(customView)
}
}
每次点击按钮时,堆栈视图都会添加一个新视图,但不会发布对arrangedSubviews 的更改,这不会触发sink 块中的代码。在上述情况下,即使arrangedSubviews.count 大于 5,按钮仍处于启用状态。
如何解决此问题,以便在 arrangedSubviews 数组中添加或删除新视图时正确发布更改?
感谢您的帮助。
【问题讨论】:
-
这基本上不只是观察数组内容变化的标准问题吗?