UITableViewCell с неопределенным количеством элементов - PullRequest
0 голосов
/ 18 марта 2019

Мне нужно сделать ячейку с несколькими кнопками.Эти кнопки являются вариантами ответов на вопрос.Но вопрос и количество кнопок (ответов) не определены, потому что я получаю эти данные от Alamofire.Таким образом, может быть 2, 3, 6 или любое количество кнопок.Есть ли способ добавить эти кнопки программно в зависимости (например) от количества элементов в массиве, чтобы они выглядели хорошо ограниченными?Как в стеке?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Это хитрый способ сделать это, но если вы знаете максимальное количество кнопок , которое у вас будет, вы можете добавить его непосредственно в свою ячейку собственного прототипа на раскадровке, не добавляя кнопкипрограммно.

Решение (Написано в Swift 4, но общий ответ)

  1. Предполагая, что на любой вопрос может быть не более 8 ответов, создайте 8 кнопокв вашей пользовательской ячейке прототипа.Добавляйте ограничения по своему усмотрению, чтобы они выглядели красиво!
  2. Не забудьте дать вашей ячейке уникальный идентификатор (в моем случае «CustomCell»).
  3. Перейдите в «Файл»> «Новый файл»>Класс Touch Cocoa> выберите подкласс TableViewCell и присвойте ему подходящее имя (в моем случае CustomCellTableViewCell.swift).Он будет содержать все ваши розетки компонентов пользовательского интерфейса.
  4. Выберите ячейку прототипа в вашей раскадровке.Перейдите к третьему значку слева и выберите «CustomCellTableViewCell» в качестве своего класса.
  5. 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
  }
}
1 голос
/ 18 марта 2019

Представление в стеке, безусловно, является способом ограничения любого количества представлений в столбце (или строке).Так что это звучит как лучший путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...