我UIStackView最初設定了 4 個按鈕。如果我以后需要用新按鈕替換最后一個按鈕或回到初始按鈕,我該怎么做?
lazy var stackView: UIStackView = {
let sv = UIStackView()
sv.axis = .horizontal
sv.distribution = .fillEqually
sv.alignment = .fill
return sv
}()
// ...
var bt4: UIButton!
var bt5: UIButton!
// viewDidLoad
func configureStackView() {
view.addSubview(stackView)
stackView.addArrangedSubview(bt1)
stackView.addArrangedSubview(bt2)
stackView.addArrangedSubview(bt3)
stackView.addArrangedSubview(bt4)
// place stackView at bottom of scene
}
func swapLastButtonInStackViewWithNewButton(_ val: Bool) {
if val {
// if true replace bt4 in stackView with bt5
} else {
// if false replace bt5 in stackView with bt4
}
}
uj5u.com熱心網友回復:
您可以像這樣存盤堆疊子視圖的排列:
lazy var stackViewArrangedSubviews = stackView.arrangedSubviews {
didSet {
setStackViewSubviews(with: stackViewArrangedSubviews)
}
}
接著
func setStackViewSubviews(with subviews: [UIView]) {
stackView.arrangedSubviews.forEach { $0.removeFromSuperview() }
subviews.forEach { stackView.addArrangedSubview($0) }
}
最后像這樣實作交換功能:
func swapLastButtonInStackViewWithNewButton(_ val: Bool) {
if val {
stackViewArrangedSubviews[3] = bt5
// if true replace bt4 in stackView with bt5
} else {
stackViewArrangedSubviews[3] = bt4
// if false replace bt5 in stackView with bt4
}
}
這并不完美,您可以根據需要改進代碼。
uj5u.com熱心網友回復:
UIStackView隱藏視圖時自動洗掉視圖。所以基本上你所要做的就是正確設定isHidden按鈕 4 和按鈕 5的布林值。
class ViewController: UIViewController {
@IBOutlet private weak var button4: UIButton!
@IBOutlet private weak var button5: UIButton!
private var showButton5 = false {
didSet {
button5.isHidden = !showButton5
button4.isHidden = showButton5
}
}
override func viewDidLoad() {
super.viewDidLoad()
showButton5 = false
}
@IBAction private func toggle() {
showButton5.toggle()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/421114.html
標籤:
