Это хитрый способ сделать это, но если вы знаете максимальное количество кнопок , которое у вас будет, вы можете добавить его непосредственно в свою ячейку собственного прототипа на раскадровке, не добавляя кнопкипрограммно.
Решение (Написано в Swift 4, но общий ответ)
- Предполагая, что на любой вопрос может быть не более 8 ответов, создайте 8 кнопокв вашей пользовательской ячейке прототипа.Добавляйте ограничения по своему усмотрению, чтобы они выглядели красиво!
- Не забудьте дать вашей ячейке уникальный идентификатор (в моем случае «CustomCell»).
- Перейдите в «Файл»> «Новый файл»>Класс Touch Cocoa> выберите подкласс TableViewCell и присвойте ему подходящее имя (в моем случае
CustomCellTableViewCell.swift
).Он будет содержать все ваши розетки компонентов пользовательского интерфейса. - Выберите ячейку прототипа в вашей раскадровке.Перейдите к третьему значку слева и выберите «CustomCellTableViewCell» в качестве своего класса.
- Control + Перетащите выводы ваших кнопок и полей, с которыми вы собираетесь работать, из раскадровки на вновь созданный
CustomCellTableViewCell.swift
.Теперь файл должен выглядеть примерно так:
class CustomCellTableViewCell: UITableViewCell {
@IBOutlet weak var question: UILabel!
@IBOutlet weak var answerOne: UIButton!
@IBOutlet weak var answerTwo: UIButton!
...
...
@IBOutlet weak var answerEight: UIButton!
}
Следующие несколько шагов будут в функции TableviewDataSource
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
.Не забудьте привести TableviewCell как CustomCell:
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as! CustomCellTableViewCell
Поместить все кнопки ответа в массив
var answerButtons = [cell.answerButtonOne, cell.answerButtonTwo..., cell.answerButtonEight]
Теперь вы можете установить текст кнопки ответа в цикле следующим образом:
for i in 0..<answerButtons.count {
if i < data[indexPath.row].answers.count { // if the answer exists, add it to the button
cell.answerButton[i].isHidden = false // show button if answer exists
cell.answerButton[i].setTitle(data[indexPath.row], for: .normal)
} else {
cell.answerButton[i].isHidden = true // hide that button
}
}