Много случаев Switch в cellForRowAtIndexPath

У меня вопрос по настройке табличного представления с жестко закодированными данными. Иногда разработчик сталкивается с ситуацией, когда вам нужно отобразить данные, которые получены не из слоя DATA MODEL, а хранятся в виде жестко закодированной информации.

Что я имею в виду Например, когда вы строите экран настроек, может быть такой UITableViewCell, как:

CustomTableViewCellName - данные конфигурации: имя / фамилия заполнителя, значок.

CustomTableViewCellPhone - Данные конфигурации: заполнитель телефона, значок.

CustomTableViewCellLogout - данные конфигурации: текст для выхода / выхода из системы, значок.

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

если мы будем реализовывать все эти клетки в

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section)
    ..... A LOT OF CASES THAT CONFIGURE EACH CUSTOM CELLS

Как вы видите, в DATA MODEL нет только заполнителей и изображений значков, которые будут храниться в UITableViewCell в качестве данных по умолчанию для меток, представлений изображений textviews и т. Д. Я не говорю о модели здесь как о модели USER, например, которая хранит пользователя имя, фамилия и т. д. Я имею в виду, что мне нужно где-то хранить данные по умолчанию, может быть, в словаре. На самом деле заполнитель - это просто заполнитель, хотя у него есть ТЕКСТ, а ТЕКСТ - это данные =)

В этом случае у нас есть данные для настройки состояния представлений по умолчанию и данные, которые будут использоваться, например, в качестве модели USER.

Что меня беспокоит, так это то, что у меня будет большой коммутатор и очень массивный контроллер.

Я хотел бы создать несколько методов, которые будут представлять разделы с переключателем, используя indexPath.row в них:

 - (UITableViewCell *)cellsForSection1:(NSIndexPath *)ip
 - (UITableViewCell *)cellsForSection2:(NSIndexPath *)ip
 - (UITableViewCell *)cellsForSection2:(NSIndexPath *)ip

и перенести эти методы в Interactor, который вернет мне ячейку. Я знаю, что Interactor должен подготовить только данные и передать их поверх Presenter для View.

Может быть, я задумался над проблемой. Я просто не хочу иметь большой переключатель в VC =) Я понимаю, что нет правильного решения. Но, возможно, кто-то сталкивался с этим.

Еще раз в моем случае данные - это ячейки по умолчанию, которые я хочу где-то настроить, чтобы предотвратить перегрузку контроллера представления. Да, может быть, это выглядит безумно, что ячейки - это данные, но посмотрите на View Controller, который содержит 1000 строк кода для конфигурации cellForRowAtIndexPath тоже сумасшедший =)

3 ответа

Если ваши данные статичны, то вместо случаев переключения я предпочитаю использовать перечисления. Используйте Enums и в его теле присвойте тег каждому вашему разделу, а затем в cellForRowAtIndexpath перечислите этот Enum и соответственно отобразите ваши данные.

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

switch(model.id)
case cellKind1:
 cell = [tableview dequeue..];
//do 
 cell.data = model
//don't do like this
cell.title = model.title;
cell.abc = model.abc
Другие вопросы по тегам