Добрый день! Подскажите в каком направлении двигаться что бы получить вот такой результат.! Динамическое добавление кнопок
Динамическое добавление кнопок в CollectionView
Все аналогично работе с TableView. У вас к примеру будет массив с кол-вом кнопок для добавления. Следовательно столько ячеек ставите для секции.
Самое главное это через UICollectionFlowLayout сформировать правильно размеры и отступы ячейки.
Дальше будет как и с таблицей, наполняете ячейку готовыми данными.
Выглядит как CollectionView. Через сториборды не знаю как такое сделать. А кодом вполне реально. Создаешь вьюмодель с нужным набором и генерируешь массив кнопок.
Если вдруг понадобится узнать кол-во строк для кнопок (может пригодиться для выставления высоты CollectioView)
Int((buttonArray.count + 3) / 4)
С видео все понятно, Только у меня CollectionView там идут ячейки с данными, а в этих ячейках добавляются кнопки. В виде получается, что массив просто заполняет ячейки. Вот как моем примере мне нужно. Получается ячейка с название фильма и в ней кнопки фиолетовые.
Если у вас фильмы отображаются не в TableView, а в CollectionView, разницы никакой нет.
В класс вашей ячейки с фильмами добавьте еще один CollectionView для кнопок. Для этой CollectionView создайте класс, который будет наполнять ячейку кнопкой и текстом под ней. Дальше будет все как в видео.
Только для вложенного CollectionView нужно отключить скролл.
Высотя ячейки будет фиксированная.
Ширина ячейки высчитывается как collectionView.frame.width / 4
Примерно у вас должно выйти что-то такое
extension ViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.bounds.size.width / 4, height: 77)
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets.zero
}
}
И соответственно само заполнение CollectionView
extension ViewController: UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return buttonArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
let buttonData = buttonArray[indexpath.row]
cell.button.text = buttonData.buttonText
cell.label.text = buttonData.labelText
return cell
}
}
Моя маленькая ошибочка. Вместо ViewController у вас будет класс чейки, т.к. это вложенная коллекция в ячейку.
Подскажите направление. Столкнулся со следующим. Получаю следующее:
Зал 1 время сеансов 12-00 13-00 14-00
Зал 2 время сеансов 13-00 14-00
Зал 3 время сеансов 14-00
Как в collectionView это запихнуть так как разное количество сеансов в залах? Нужно как на картинке вверху, а то какая-то ерунда получается.
(key: “2”, value: [ButtonStatic.FilmsShedule(hall: “2”, datatime: “11:23:00”)])
(key: “4”, value: [ButtonStatic.FilmsShedule(hall: “4”, datatime: “16:20:00”)])
(key: “1”, value: [ButtonStatic.FilmsShedule(hall: “1”, datatime: “12:45:00”), ButtonStatic.FilmsShedule(hall: “1”, datatime: “17:35:00”)])
Допусти это filmArray, тогда
numberOfSections будет filmArray.count
numberOfItemsInSection будет filmArray[section].value.count