【问题标题】:Combine publisher for changes to UIStackView's arrangedSubviews array合并发布者以更改 UIStackView 的排列子视图数组
【发布时间】: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 数组中添加或删除新视图时正确发布更改?

感谢您的帮助。

【问题讨论】:

  • 这基本上不只是观察数组内容变化的标准问题吗?

标签: ios swift uikit combine


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多