ios - 如何以编程方式向 StackView 中的每个按钮添加单独的选择器/侦听器 swift 4.2
问题描述
我已经使用 for 循环以编程方式将按钮添加到 uistackview 中,但我希望每个按钮都有自己独立的侦听器,我想不出它的逻辑。我试图添加一个#selector,但显然它们都调用了相同的方法。
for imageName in imagesArray1{
let imageButton: UIButton = {
let button = UIButton()
let myUIImage = UIImage(named: imageName as! String)
button.setImage(myUIImage, for: .normal)
button.contentMode = .scaleAspectFit
button.tag = buttonTag
buttonTag += 1
button.addTarget(self, action: #selector(handleSelectedAvatar(_:)), for:.touchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
stackView1.addArrangedSubview(imageButton)
imageButton.widthAnchor.constraint(equalTo: stackView1.widthAnchor, multiplier: 1/4).isActive = true
imageButton.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.width/4).isActive = true
}
解决方案
有2个解决方案。
1) 对所有按钮使用单个选择器:
button.tag = some_tag (Int)
button.addTarget(self, action: #selector(handleSelectedAvatar(_:)), for: .touchupInside)
handleSelectedAvatar
执行:
@objc func handleSelectedAvatar(_ sender: UIButton) {
switch sender.tag {
case 0: // Do something with UIButton with tag 0
case ...
}
}
2)使用选择器数组:
let selectors = [#selector(handleSelectedAvatar), ...]
比为按钮设置选择器:
button.addTarget(self, action: selectors[your_index], for: .touchupInside)
推荐阅读
- mysql - Mysql 将 meta_key 捕获为列
- powerbi - DAX 公式检查两列中的值
- python-3.x - 在 Tkinter GUI 上嵌入 matplotlib 图
- c++ - 为类提供自己的数据
- apache-spark - 如何在每个 Worker 中的 Spark Dataframe 中加载数据,以防止将大量数据加载到 Master 节点
- python - Pandas Groupby + Agg 上架速度非常慢
- tensorflow - Keras MaxPooling2D 中的 None 步幅是否根据过滤器大小动态设置?
- c++ - 嵌套循环边界
- .net-core - 我们可以使用 .Net 中的 FFMPEG 工具在生成的视频上添加背景音乐和帧率吗?
- python - Getting ValueError rending my Django CreateView