【发布时间】:2019-05-03 13:46:39
【问题描述】:
我正在使用字母表中的 26 个字母并使用相应的字母创建 UIButton,在创建 UIButtons 的数组后,我发送存储这些按钮的数组并将其添加到堆栈视图.
stackview 也在 UIView 内,我称为 abcBtnView。
如果我将整个 UIButton 数组传递给它,它会起作用,但是垂直或水平的 26 个按钮看起来不太好。所以我决定不发送 26 个按钮的数组,而是发送 6 个数组,5 个数组,5 个 UIbuttons,一个数组,1 个按钮。
我得到的错误是我无法将UIButton 转换为UIView 类型。
参数UIStackview(arrangedSubviews: [UIView]) 的类型为[UIView],但是第一次它仍然占用了我的[UIButton] 数组,但如果我放置了多个UIbuttons 数组,它就不会占用它。
我想知道如何将多个 UIButton 数组添加到 UIStackview,以便我可以拥有 6 列和 5 行的 UIButton?
我尝试过的方法:
- 尝试将 [UIButton] 类型转换为 [UIView]
- 创建了一个包含 UIButton 数组的数组,然后使用了一个 for 循环将每个 UIstackview 添加到我们的视图(abcBtnView)中。
下面的代码有效,但我只能通过一个 UIBUTTON。
private func makeABCbtns(){
let abcde = createButtons(named: "A", "B", "C", "D", "E")
let fghij = createButtons(named: "F", "G", "H", "I", "J")
let klmno = createButtons(named: "K","L", "M", "N", "O")
let pqrst = createButtons(named: "P", "Q","R", "S", "T")
let uvwxy = createButtons(named: "U", "V", "W","X", "Y")
let z = createButtons(named: "Z")
let stackView = UIStackView(arrangedSubviews: abcde)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .horizontal
stackView.spacing = 1
stackView.distribution = .fillEqually
// UIView where all the buttons will be in.
abcBtnView.addSubview(stackView)
//I am giving the stackview the size of the abcBtnView.
stackView.anchor(top: abcBtnView.topAnchor,
leading: abcBtnView.leadingAnchor,
bottom: abcBtnView.bottomAnchor,
trailing: abcBtnView.trailingAnchor,
centerXaxis: nil,
centerYaxis: nil)
}
func createButtons(named: String...) -> [UIButton]{
return named.map { letter in
let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle(letter, for: .normal)
button.backgroundColor = .green
button.setTitleColor( .blue , for: .normal)
return button
}
}
【问题讨论】:
-
将 A-Z 组合成一个数组,然后使用该数组或循环遍历数组并将每个数组添加到堆栈视图。
-
@TejaNandamuri 没有用。这是我提到的我尝试过的事情之一,但是当我这样尝试时它给了我一个错误。
标签: ios swift xcode uibutton uistackview