Я пытаюсь динамически создавать UIButtons внутри UIStackViews, которые будут загружаться в TableViewCell.Как добавить stackViews в UITableViewCell?
у меня есть два массива, которые держат значения Строка:
array_1 = ["a" , "b" , "c"]
array_2 = ["x" , "y" , "z"]
я есть функция, которая создает UIButton и функцию, которая генерирует массив UIButton массивов, который содержит одно значение из «array_1» плюс все значения от 'array_2' (то есть: [[а, х, у, г], [Ь, х, у, г], [с, х, у, г]])
func createButton(title : String) -> UIButton {
let newButton = UIButton(type: .system)
newButton.setTitle(title, for: .normal)
newButton.backgroundColor = UIColor.lightGray
return newButton
}
func generateButtons() -> [[UIButton]]{
var topButtonArray = [UIButton]()
var buttomButtonArray = [UIButton]()
var finalButtonArray = [[UIButton]]()
for title in array_1 {
topButtonArray += [createButton(title: title)]
}
for title in array_2 {
buttomButtonArray += [createButton(title: title)]
}
for button in topButtonArray {
finalButtonArray += [[button]+buttomButtonArray]
}
return finalButtonArray
}
теперь у меня есть функция, которая создает UIStackView, которые его организованные subviews представляют собой массивы кнопок, и тот, который генерирует массив UIStackViews, которые содержат эти стеке с кнопками
func createStackView(subViews : [UIButton]) -> UIStackView{
let stackView = UIStackView(arrangedSubviews: subViews)
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.alignment = .fill
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.spacing = 5
return stackView
}
func generateStackViewArray() -> [UIStackView] {
var stackViewArray = [UIStackView]()
let finalButtonArray = generateButtons()
for buttons in finalButtonArray{
stackViewArray += [createStackView(subViews: buttons)]
}
return stackViewArray
}
наконец, я хочу, чтобы загрузить эти UIStackViews в отдельные UITableViewCells
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array_1.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "First")!
cell.contentView.addSubview(generateStackViewArray([indexPath.row])
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let screenSize : CGRect = UIScreen.main.bounds
let screenHeight = screenSize.height
let relativeCellSizeDefault = screenHeight/CGFloat (array_1.count)
return relativeCellSizeDefault
}
сейчас мой конечный результат является UITableView, с 3-х клеток (так же, как я хочу) , но в первой и второй клетка я могу видеть только первую кнопку (то есть: а/б), а в третьей ячейке я получить то, что я хочу, чтобы это произошло (то есть: а, х, у, г):
Я попытался выяснить проблему с моей логикой, но я не могу найти ответ, почему он загружает весь массив кнопок в последней ячейке.
также, я новичок, так что может быть некоторая избыточность или я не мог бы использовать наилучшую практику для некоторых вещей - не стесняйтесь исправлять меня и большое спасибо за помощь