2015-05-14 4 views
3

Я новичок в разработке на мобильном мире, и у меня есть архитектурный вопрос для моего проекта:MVC: Где разместить пользовательские UICollectionCell

, где это правильное место для настроенного UICollectionViewCell?
Инстинктивно я бы разместил его под (V) iew.

редактировать

Я хотел бы использовать его таким образом:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    var customCell: CustomCell = collectionView.dequeueReusableCellWithReuseIdentifier(CustomCell.identifier, forIndexPath: indexPath) as! CustomCell 
    customCell.setupWithSomeOtherObject(..) 
    return customCell;    
} 
+0

это зависит, на самом деле ...если ячейки ничего не делают с уровнем _model_, и он заполняется другим классом из слоя _controller_, чтобы показывать только значения, тогда он находится на уровне _view_. если ваша ячейка напрямую подключается к слою _model_ и вносит изменения в это напрямую, это будет более вероятно на уровне _controller_ then, но в основном «... ViewCell» должен быть явно только на уровне _view_. – holex

+0

@holex, true. Другой вопрос: правильно ли изменить * model * непосредственно в ячейке. –

+0

@flashadvanced, а не хорошая практика, потому что, если уровень _model_ обновляется (по какой-либо причине), слой _view_ не должен затрагиваться вообще , если вы единственный человек, который работает над проектом, вы можете перестроить его относительно быстро, но когда вы работаете в команде, а ваша работа управляет слоем _view_, а работа вашего товарища по команде - это слой _model_; вы не хотели бы получать дополнительную работу (пока вы не хотели бы давать дополнительную работу кому-либо) после простого обновления любого уровня, который не должен быть подключен напрямую. это опыт и скромное мнение. :) – holex

ответ

2

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

+0

Фактический факт наследования на самом деле не определяет это четко, но его соединение с слоем _model_ выполняется, поскольку слой _view_ не имеет прямого подключения к _model_, он всегда происходит через элемент уровня _controller_. если есть такое соединение, ячейка в основном находится на уровне _controller_ then (мы можем обсуждать, является ли это хорошей или плохой архитектурой), но логически это будет ее место в этом трехстороннем «отношении». – holex

1

Чтобы ответить на ваш вопрос, UICollectionViewCell должен приземлиться в режиме просмотра.

Если вы новичок в разработке мобильных устройств, я настоятельно рекомендую узнать, что такое MVVM-модель и как вы можете ее перенести в iOS. Основная проблема с MVC заключается в том, что в конечном итоге все заканчивается в подклассах ViewController. Также MVVM имеет преимущества при тестировании вашего кода (да, в конце концов вам это тоже понадобится). Конечно, MVVM не является святым граалем, но вы можете определенно дать ему шанс.

Хорошая статья для начала: MVVM

+0

спасибо за упоминание MVVM, что я уже видел, и я думаю, что многие люди будут двигаться в этом направлении! – SirDeveloper

+0

@SirDeveloper, я лично не рекомендовал бы MVVM, его гораздо сложнее поддерживать в долгосрочной перспективе, и это действительно чувствительно к ресурсам; на iOS это не было бы разумным выбором. – holex

1

MVC большая структура, чтобы ответить на ваш вопрос. Но я попробую;

Предположим, вы собираетесь создать базовую фотогалерею.

Вам нужен (M) odel для ваших объектов, предположим, что это фотомодель, и у нее есть имя, createdDate sth. Эта модель просто хранит некоторую информацию в вашем приложении.

Для отображения некоторых визуальных эффектов вам нужен (V). Например ImageView, чтобы показать ваше изображение, например UICollectionView так UICollectionView это вид. А также UICollectionViewCell - это вид внутри UICollectionView. Также вы можете добавить другое представление в свою ячейку.

Для управления и контроля этого вида и модели нужен (C) ontroller. Например, вы сохраняете путь к файлу изображения в объекте Photo, теперь вы хотите показать его в UICollectionViewCell внутри UICollectionView.

Итак, ваш ответ UICollectionViewCell должен быть внутри ваших представлений. В MVC все элементы управления должны быть в Контроллер избегайте действий внутри. Вы должны дать делегат в контроллер через UICollectionView

Смежные вопросы