Передайте объект / структуру в UITableViewCell или настройте ячейку в configureCell: atIndexPath :? - PullRequest
3 голосов
/ 25 января 2012

Мне нужно настроить настраиваемую ячейку табличного представления с содержимым модельного объекта. Какой шаблон дизайна предпочтителен? Я не ищу «правильный» ответ, просто хорошее обсуждение плюсов и минусов.

1) Вручную настройте ячейку в configureCell: atIndexPath:?


- configureCell:atIndexPath:
    {
    myCell.field1 = modelObject.field1 ;
    myCell.field2 = modelObject.field2 ;
    }

2) Просто код пользовательской ячейки, чтобы принять объект модели и передать объект модели оптом в ячейку в configureCell: atIndexPath:?


- configureCell:atIndexPath:
    {
    myCell.model = modelObject ;
    }

Согласно Закону Деметры , возможно, (1) лучше. Однако, когда ячейка должна обрабатывать действия пользователя, является ли просмотр таблицы более подходящим контроллером или самой ячейкой (используйте ячейку как ViewModel )? Я думаю, что последний может сделать для более ясного кода:

1) Поведение с представлением таблицы в качестве контроллера


// tableview
- configureCell:atIndexPath:
    {
    myCell.field1 = model.field1 ;
    myCell.button.delegate = myDelegate ; // have to define MyDelegate protocol
    }

// Call behavior in cell
[self.button.delegate delegateCall] ;

// delegate
- (void) delegateCall
    {
    // find out which cell was manipulated
    // find the object associated with the table cell
    [theFoundModelObject myBehavior] ;
    }

2) Поведение ячейки в качестве модели представления:


- configureCell:atIndexPath:
    {
    myCell.model = modelObject ; // cell has direct access to model behavior
    }

// Call behavior in cell
[self.model myBehavior] ;

Ответы [ 2 ]

4 голосов
/ 25 января 2012

Я предпочитаю подход создания собственного подкласса ячейки и передачи ему всего объекта модели для настройки.

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

2 голосов
/ 26 января 2012

Я фанат определенной формы # 2.

Я не думаю, что контроллер должен настраивать все в ячейке, но я также не думаю, что ячейка должна удерживатьмодель длиннее чем у него тоже.Таким образом, у моих подклассов ячейки есть метод в виде:

- (void)updateCellWithModel:(YourModel *)model;

Эта функция не содержит ссылку на модель, но использует свойства модели для обновления состояния ячейки.Я предпочитаю делать все мои модели CoreData резервными, и поэтому NSFetchedResultsController предоставляет ловушки для правильного обновления ячейки снова.

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