Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

Работа с кастомными UITableViewCell и MVC

22.04.2014, 17:40. Просмотров 685. Ответов 7
Метки нет (Все метки)

Всем привет!

У меня есть привычка при работе со своими кастомными ячейками делать так:

Допустим, есть ячейка, отображающая данные по человеку (имя, адрес, фото, рост и т.д.) и есть у меня класс Human, в котором живут эти все данные.
В ячейке я делаю свойство типа Human, переопределяю сеттер, и в этом сеттере распихиваю информацию о человеке по всем нужным View, который у меня в этой ячейке есть для вывода информации.
В методе cellForRowAtIndexPath достаточно сделать только что-то вроде этого:
Objective-C
1
2
Human *human = [humans objectAtIndex:indexPath.row];
cell.human = human;
На одном из интернет-ресурсов я недавно прочитал, что это плохой подход (человек делал похоже) и он самым страшным образом нарушает концепцию MVC. Мол, View-ячейка занимается не только собственным отображением, а и ковырянием в объекте класса Human.

Что вы скажете насчет такой реализации? Мне страшно удобно таким подходом пользоваться, но смутило упоминание об "идеологическом несоответствии".

Буду рад комментариям.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2014, 17:40
Ответы с готовыми решениями:

Изображение перед uitableviewcell как?
Здравствуйте. Как добавить изображение перед ячейками? Скрин:...

Отображение UITableViewCell в UIStoryboard
Всем доброго времени суток, меня интересует вопрос: как выводить ячейки в...

The best way to calculate UITableViewCell height
Привет всем. Назрел довольно давний вопрос. Все мы пользуемся чудесными...

Изменение высоты UITableViewCell
Нужно сделать таблицу, ячейки которой при нажатии расширяются по высоте и...

Редактирование заголовка UITableViewCell
Здравствуйте. Я делаю сейчас небольшое задание по Objective-C. Это обычный...

7
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
23.04.2014, 07:23 #2
kievkao, Для небольших проектов подход вполне уместен.
Чем больше проект и выше повторная применимость компонентов, то конечно же, нарушение основного шаблона проектирования в данном случае может привести к образованию множественного дублирования кода.
Затем может появится спагетти код. К примеру если кто-то сделает кнопку в ячейке, и по нажатию этой кнопки будет у вашего human голову менять.

Но если проект небольшой и по типу написал-и-забыл – это вполне удобное решение.

P.S. Лично я не люблю такой подход, а предпочитаю интерфейс делать подобный UITableViewCell.
Без инкапсуляции данных модели. Ибо повторная применимость это очень и очень хорошо.

P.P.S Есть еще подход работать на уровне интерфейсов и предоставлять не объект типа human, а объект типа id<Protocol>.
Это уже лучше. Соблюдается контракт между моделью, реализующей интерфейс и отображением, которое отрисовывает визуальное представление этого интерфейса.
1
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
25.04.2014, 10:00 #3
Human *human = [humans objectAtIndex:indexPath.row];
cell.human = human;
Веселее когда самого Humаn нет вообще.
Вместо него просто словарь.

Objective-C
1
2
3
NSDictionary * human = [humans objectAtIndex:indexPath.row];
 
cell.title.text= human[@"name"];
кстати objectAtIndex это пережиток IOS5

так что вернее будет

Objective-C
1
2
3
NSDictionary * human = humans[indexPath.row];
 
cell.title.text= human[@"name"];
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
25.04.2014, 11:36 #4
Веселее когда самого Humаn нет вообще.
Вместо него просто словарь.
noname_club, такого вообще быть не должно. Это моветон, без модели-то, и без протокола.
0
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
25.04.2014, 13:32 #5
Это моветон, без модели-то, и без протокола.
зачем протокол и модель когда сами данные не сложны.
Достаточно описания в Excel файлике на эти самые структуры + #define макросы названий свойств

Objective-C
1
2
3
#define k_NAME @"name"
#define k_EMAIL @"email"
// и прочее
+ так как сами данные в любом случае это словарь то они легко сохраняются в NSUserDefaults без промежуточных преобразователей.

Опять же это все применимо если сами данные не сложны по структуре.
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
25.04.2014, 14:35 #6
noname_club, я даже сам не понимаю зачем я вам это сказал.
Вы со своими дефайнами уже не первый раз...
Просто забудьте.
0
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
25.04.2014, 18:31 #7
Вы со своими дефайнами уже не первый раз...
Переходим на личности да?
Конструктивной критики не будет? Хорошо. Я просто сказал какой еще может быть способ работы с данными, не более.
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
25.04.2014, 22:49 #8
Цитата Сообщение от noname_club Посмотреть сообщение
Переходим на личности да?
Да если бы на личности... Все равно эффекта ноль.
Цитата Сообщение от noname_club Посмотреть сообщение
Конструктивной критики не будет? Хорошо. Я просто сказал какой еще может быть способ работы с данными, не более.
Способ ваш - как у флинстоуна автомобиль, где нужно ногами перебирать, да еще и баранку крутить.

P.S. Конструктив можете попробовать найти в своих предыдущих темах про define-ы, там вам пытались разные мысли донести, а вы упираетесь до сих пор.
P.P.S На личности? Заняться мне больше нечем... Голые факты.
0
25.04.2014, 22:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2014, 22:49

Кастомная UITableViewCell как в iMessage
Целый день мучаюсь с кастомной ячейкой. Решил начать с нуля. Хочу создать...

Неизвестный объект занимает всю область ячейки UITableViewCell
Есть класс наследованный от UITableViewController в методе...

$_FILES c кастомными полями
Можно ли В $_FILES запихнуть кастомные поля, кроме стандартных? это легко...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru