Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

Работа с кастомными UITableViewCell и MVC - Программирование iOS

22.04.2014, 17:40. Просмотров 652. Ответов 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 и MVC (Программирование iOS):

Изображение перед uitableviewcell как? - Программирование iOS
Здравствуйте. Как добавить изображение перед ячейками? Скрин: http://prntscr.com/14kpgp Двигаю ячейки и выше их идет изображение....

The best way to calculate UITableViewCell height - Objective-C
Привет всем. Назрел довольно давний вопрос. Все мы пользуемся чудесными классами UITableViewCell, UITableView. Мне бы хотелось...

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

Редактирование заголовка UITableViewCell - Objective-C
Здравствуйте. Я делаю сейчас небольшое задание по Objective-C. Это обычный To-Do List. По кнопке + на новом экране создается объект...

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

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

7
zulkis
684 / 611 / 38
Регистрация: 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 / 11
Регистрация: 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 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
25.04.2014, 11:36 #4
Веселее когда самого Humаn нет вообще.
Вместо него просто словарь.
noname_club, такого вообще быть не должно. Это моветон, без модели-то, и без протокола.
0
noname_club
104 / 95 / 11
Регистрация: 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 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
25.04.2014, 14:35 #6
noname_club, я даже сам не понимаю зачем я вам это сказал.
Вы со своими дефайнами уже не первый раз...
Просто забудьте.
0
noname_club
104 / 95 / 11
Регистрация: 01.05.2013
Сообщений: 600
25.04.2014, 18:31 #7
Вы со своими дефайнами уже не первый раз...
Переходим на личности да?
Конструктивной критики не будет? Хорошо. Я просто сказал какой еще может быть способ работы с данными, не более.
0
zulkis
684 / 611 / 38
Регистрация: 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 - Objective-C
Есть класс наследованный от UITableViewController в методе tableView:cellForRowAtIndexPath я получаю ячейку: cell = ;потом создаю...

Как выбрать 2 случайные записи с определенными кастомными полями? - WordPress
Добрый день. Подскажите как выбрать 2 случайные записи с определенными кастомными полями и вывести их только 2. Сейчас код такой: ...

Xamarin & UITableViewCell - Xamarin
Доброго времени суток. Вопросик возник у меня есть класс таблицы с методом: public override UITableViewCell GetCell(UITableView...

Работа с List MVC - C# MVC
Доброе время суток. Ребята, такая ситуация Есть модель Journal, которую я использую для выполнения хранимой процедуры namespace...


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

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

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