【发布时间】:2020-12-22 23:05:13
【问题描述】:
我有一个垂直的 UIStackView,我在这个视图中附加了一个水平的 UIStackView 和一些 UILabel。我附加了 UITapGestureRecognizer 来处理点击动作。当我点击一行时,如何更改例如标签(这是一个子视图)?
到目前为止,这是我的代码:
for article in articleType {
//Create a row
let row = UIStackView()
row.axis = NSLayoutConstraint.Axis.horizontal
//Create a label and indicator
let label = UILabel()
label.text = article.label
let indicator = UILabel()
indicator.text = "off"
//Add label to row and row to parent stack view
row.addSubView(label)
row.addSubView(indicator)
mainUiStackView.addArrangedSubview(row)
//Create tap handled
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(sender:)))
row.addGestureRecognizer(tap)
}
@objc func handleTap(sender: UITapGestureRecognizer? = nil) {
print(sender.view)
//This is where i'm stuck, how can i change the second label's text to "on" for example?
sender.view.indicator.text = "on"
}
【问题讨论】:
-
您不能点击堆栈视图。
-
@matt,为什么不呢?我刚刚创建了一个测试应用程序,在其中我将轻击手势识别器添加到排列的子视图和堆栈视图中,它们都按预期触发。 (我必须点击子视图之间的空间才能触发堆栈视图的点击手势识别器,但它起作用了。)
-
@DuncanC 好吧,也许他们改变了这一点。过去,堆栈视图是一种特殊的视图。
-
所以每个堆栈视图将始终包含恰好 2 个标签,当用户点击给定堆栈视图时,您总是想进入堆栈视图并将其标签文本设置为“on”?
-
是的。我实际上想将复选框图像更改为开/关,但在示例代码中使用了 UILabel 所以它并不复杂,但逻辑将以相同的方式应用。
标签: ios swift uitapgesturerecognizer