Я новичок в разработке iOS, размышляя над тем, как лучше всего подойти к довольно простой проблеме проектирования. Я хочу отобразить набор элементов, каждый из которых имеет структуру, очерченную. В данном наборе не более 10 элементов.
Каждый элемент включает миниатюру, заголовок, рекламный блок и набор кнопок. Есть два осложнения:
- Количество текста и количество кнопок являются переменными.
- Текст требует некоторого внутреннего форматирования (курсив и полужирный).
Я рассмотрел эти подходы:
-
Используйте представление таблицы с настраиваемым, изменяемым по размеру UITableViewCell, возможно, используя для этого текст, например, OHAttributedLabel. Для переменного количества кнопок либо выкладывайте их программно, либо, возможно, используйте новый вид коллекции (для более старых iOS, необходимо использовать стороннее представление сетки).
-
Используйте представление таблицы с пользовательской ячейкой на основе UIWebView.
-
Сделайте весь набор как один UIWebView.
-
Используйте представление таблицы с разделами; каждый элемент имеет свой собственный раздел и разбирает кнопки и текст в строках.
Хотелось бы получить предложения о том, как к этому приблизится более опытный разработчик iOS.
EDIT: теперь я считаю, что лучший способ может быть:
5) Используйте UICollectionView для всего этого.
UPDATE: В конце концов, я заложил все это в код как пользовательскую ячейку таблицы (например, # 1). Это был хороший выбор не только по причинам, указанным в ответе, но и потому, что, как кто-то новый для разработки iOS, мне нужно было получить под моим поясом. Даже не использовал представление коллекции для кнопок, потому что меня беспокоило производительность, а также хлопот поддержки iOS5.
Я действительно думаю, что использование коллекционного представления для всего дизайна (# 5) было бы изящным решением, и я действительно начал этот путь. Однако некоторые осложнения, не показанные на упрощенном рисунке выше, сделали это громоздким.
2nd UPDATE: # 1 оказался тупиком. Мое окончательное решение использовало UIWebView (# 3) - см. Ответ.