Расширение ячейки таблицы UITableViewCell

uitableviewcell

#1

Может кто сталкивался такой задачей прошу подсказать, как вы ее решали. Суть такова - есть ячейка для таблицы: слева кнопка, справа кнопка, вверху метка с текстом, внизу метка с текстом. Так вот в некоторых случаях нужно расширять ячейку и продублировать те же элементы два три четыре раза но только в этой ячейке, другими словами несколько ячеек объединить и показать как одну большую ячейку в таблице без разделительных полос. Буду рад если кто подскажет как это сделать или прикрепит ссылку по которой будет такой пример. Заранее спасибо.


#2

Как это в сторибордах сделать - сложно сказать. Придется делать вертикальный стек и добавлять туда эти вьюхи кодом.

В коде это будет примерно также, только намного проще. Имея вьюмодель, просто генерировать нужные вьюхи и обрабатывать соответствующие нажатия.


#3

А такой вариант подойдет - когда нужно продублировать данные в одной ячейке использовать вложенную таблицу, просто в ней убрать разделители и сделать запрет на прокрутку или это плохой вариант?


#4

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


#5

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


#6

что-то подобное только на днях делал
tableview

2-й уровень ячеек - это новая таблица внутри 3-й ячейки основной таблицы.
Все легко делается если ячейки будут иметь фиксированную высоту.
Вам подобное нужно?

Ну и space между вложенными ячейками убирается легко.


#7

Так сделай одну таблицу с разворачивающимися ячейками. Это проще в разы.


#8

если использовать не чистые констрейнты, а обертку, например SnapKit, все в разы упроститься.


#9

Я придумал решение только теперь хочется узнать а можно разделитель ячеек в таблице выключать у определенных ячеек или нет? У всей таблицы можно я в интерфейс билдер увидел уже это.


#10

можно. :slight_smile:
Делаешь свой разделитель в виде вьюхи и добавляешь в ячейку. :slight_smile:


#11

#12

А 10x во вложенной таблице как реализовано!? Аж интересно интересно)


#13

10х это как раз все еще основная ячейка таблицы.
Получается сперва в ячейке делаем все элементы для основной части.
Далее поверх этого в ячейке делаем второй набор элементов, который будет показываться для вложенной таблицы. Т.е. 10х это лейбл, который показывается в ячейке, если в ней нужно отобразить вложенную таблицу, основные элементы прячутся и отображается второй слой, который содержит вложенную таблицу в ячейку. Дальше таблица работает с этим же классом ячейки. Таким образом вся логика уже готова.


#14

я бы кодом это все лепил :slight_smile:
в ячейке бы формировался стеквью с нужным количеством элементов. И все само бы растягивалось как надо. )


#15

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

Но я пока для себя не вижу плюсов от всего этого делать кодом.
Больше кода, не видно результата при проектировании.
Я слишком ленивый писать лишний код.


#16

Плюсы увидишь, когда тестеры станут заворачивать билды, потому что там цвет отличается, а там шрифт. Копипаст в сторибордах портит всю малину. Плюс переиспользовать это сложно. Плюс наглядности в случае переиспользования (контейнеры и пр) нет. Плюс сложные вещи приходится кодом лепить и тогда путаница возникает: тут верстка, а тут код. Ну и, сториборды в плане разработки медленные. Особенно если @designable используешь.

Единственный у них плюс что можно быстро налепить прототип формы и с collectionView например проще работать чем в коде. Там надо адаптеры писать, которые будут отрисовывать данные как надо. Но опять же, с адаптерами - 1 раз написал и пользуй дальше во всем проекте.

А насчет лишнего кода - тут с одной стороны да. Чем больше кода, тем больше ошибок. С другой стороны, вот посмотришь на сториборды где кнопки к примеру одинаковые лежат, можно на 100% быть уверенным что они одного цвета? И что в приложении у них не поедет текст?

И самое фиговое в сторибордах, это верстка под SE и 5S, которую нельзя разделить SizeClass-ами. Или iphone/ipad, которые тоже имеют схожий sizeclass. И приходится лепить костыли, вместо того чтобы четко знать какой экран и какой дизайн ему нужен.

Но в конечном счете нет никакой разницы ,если приложение написано быстро и работает как надо. )


#17

У меня как раз все наоборот. Все легко переиспользуется, главное сложные элементы оформлять как отдельные View. Что бы текст не ехал, опять же, нужно знать как правильно все разметить и понимать как это будет работать с разной длиной текста.
Единственное неудобство, если много сторибоардов смотреть, начинает подвисать и IB просто отваливается. Но все легко исправляется перезапуском Xcode.


#18

Тут дело привычки. Но когда кто-то залил коммит с правкаими нтерфейса, тут начинаются пляски. :wink:


#19

С этим согласен ))))))


#20

Подскажите как в классе ячейке добраться до сторибоарда для инициализации вьюконтроллера

в классе вьюконтролера этот код работает
guard let rememberVC = storyboard?.instantiateViewController(withIdentifier: “RememberVC”) as? RememberVC else { return }

в классе ячейки не хочет. пишет нет свойств storyboard?. Плиз подскажите кто знает