我正在以編程方式使用 UIKit 構建一個應用程式。我有一個 for 回圈在螢屏上呈現 5 個 UIStackView,每個 StackView 都有一個觸發功能的點擊手勢。
private func configureCardsMainContainer() {
cardsMainContainer = UIStackView()
//...
for i in 0..<5 {
configureCardsHContainer(index: i)
}
//...
}
private func configureCardsHContainer(index:Int) {
cardsHContainer = UIStackView()
//...
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(clickView(_:)))
tapGesture.delegate = self
cardsHContainer.addGestureRecognizer(tapGesture)
}
@objc func clickView(_ sender: UIStackView) {
let details = DetailsViewController()
self.navigationController?.pushViewController(details, animated: true)
}
單擊可單擊的 StackView 后,它導航到 DetailsViewController,我想將 DetailsViewController 的導航標題設定為每個已單擊的 StackView 的不同內容。問題是,我無法識別發件人視圖,有什么方法可以識別發件人是 StackView 嗎?
uj5u.com熱心網友回復:
很簡單,將您的堆疊放入一個陣列中。
var stacks: [UIStackView] = []
private func configureCardsMainContainer() {
cardsMainContainer = UIStackView()
//...
stacks = 0..<5.map { createCardsHContainer(index: $0) }
//...
}
private func createCardsHContainer(index:Int) -> UIStackView {
let cardsHContainer = UIStackView()
//...
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(clickView(_:)))
tapGesture.delegate = self
cardsHContainer.addGestureRecognizer(tapGesture)
return cardsHContainer
}
@objc private func clickView(_ sender: UIStackView) {
guard let index = stacks.firstIndex(where: { $0 === sender }) else { return }
...
}
當然,如果您將重復的組件提取到單獨的視圖中,這可以更簡單地完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450993.html
