arrays - 如何从 Swift 中的数组以编程方式在堆栈中创建按钮
问题描述
我是 Swift 新手,我想知道如何从数组中获取一些值并将它们转换为堆栈中的按钮。我有一个包含狗及其信息的数组。我希望按钮显示每只狗的名字。狗的数量可以改变,所以我需要改变堆栈以反映数组中的内容。我真的迷路了,我知道我需要将此代码添加到视图控制器但我找不到与此类似的任何内容
这是我的数组:
var myDogs = [
Dog(name: "Saleks", gender: "Male", speed: 50),
Dog(name: "Balto", gender: "Male", speed: 70),
Dog(name: "Mila", gender: "Female", speed: 20)
]
这是我的视图控制器:
@IBOutlet weak var buttonsStack: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
for Dog in myDogs {
print("\(Dog.name)")
}
//向数组中添加一条新狗
@IBAction func buyDogButton(_ sender: UIButton) {
func buyDog() {
myDogs.append(Dog(name: "Dogname", gender: "female", speed: 20))
}
解决方案
我会这样做:
如此处所述创建stackView:以编程方式在UIStackView中添加视图
但不是图像或标签,而是创建按钮
所以代码看起来像这样(在视图 DidLoad 中):
var myDogs = [
Dog(name: "Saleks", gender: "Male", speed: 50),
Dog(name: "Balto", gender: "Male", speed: 70),
Dog(name: "Mila", gender: "Female", speed: 20)
]
let stackView = UIStackView(frame: CGRect(x: 40, y: 100, width: 60, height: 100))
stackView.backgroundColor = .red
stackView.axis = NSLayoutConstraint.Axis.vertical
stackView.distribution = UIStackView.Distribution.equalSpacing
stackView.alignment = UIStackView.Alignment.center
stackView.spacing = 16.0
for dog in myDogs {
let button = UIButton() // Need to set the IBAction
button.setTitleColor(.blue, for: UIControl.State.normal)
button.setTitle(dog.name, for: UIControl.State.normal) // "Click"
button.backgroundColor = .red
stackView.addArrangedSubview(button)
}
stackView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(stackView)
//Constraints
stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
我将背景颜色设置为红色以使按钮非常明显您可能希望拥有具有共同宽度的按钮,然后在创建按钮时设置它们的框架。
推荐阅读
- css - css-grid 媒体查询没有响应
- java - 为什么同一个 Android App 在 Android 7.0 及更高版本之间不兼容?
- r - 如何对数据框进行多个功能
- mysql - 无法将Excel数据导入Mysql
- javascript - 是否可以“伪实现”LinkedIn 添加到个人资料按钮?
- angular - 如何使用 REST 调用的结果动态初始化 CellEditor
- elasticsearch - Elasticsearch - 如何结合 bool 和 range 过滤器
- pyspark - 需要使用 Pyspark 连接 Teradata 的解决方案
- testing - 我需要帮助查找非功能性需求基准的列表吗?
- javascript - 有没有办法在 App.Module.ts 中使用 configService?