diff --git a/src/collections/src/NICollectionViewCellFactory.h b/src/collections/src/NICollectionViewCellFactory.h index 18703d722..f95d63c92 100644 --- a/src/collections/src/NICollectionViewCellFactory.h +++ b/src/collections/src/NICollectionViewCellFactory.h @@ -85,65 +85,9 @@ _model.delegate = (id)[NICollectionViewCellFactory class]; */ - (void)mapObjectClass:(Class)objectClass toCellClass:(Class)collectionViewCellClass; -/** - * Returns the size for a view at a given index path. - * - * Uses the sizeForObject:atIndexPath:collectionView: selector from the NICollectionViewCell - * protocol to ask the object at indexPath in the model what its size should be. If a class mapping - * has been made for the given object in this factory then that class mapping will be used over the - * result of cellClass from the NICollectionViewCellObject protocol. - * - * If the cell returns a size of zero then collectionViewLayout.itemSize will be used. - * - * Example implementation: - * -@code -- (CGSize)collectionView:(UICollectionView *)collectionView - layout:(UICollectionViewLayout*)collectionViewLayout - sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return [self.cellFactory collectionView:collectionView layout:collectionViewLayout sizeForItemAtIndexPath:indexPath model:self.model]; -} -@endcode - * - * @param collectionView The collection view within which the item exists. - * @param layout The layout of the collection view. - * @param indexPath The location of the cell in the collection view. - * @param model The backing model being used by the collection view. - * @returns The size of the cell mapped to the object at indexPath, if it implements - * sizeForObject:atIndexPath:tableView:; otherwise, returns - * collectionViewLayout.itemSize. - */ -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model; +- (Class)collectionViewCellClassForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model; -/** - * Returns the size for a view at a given index path. - * - * Uses the sizeForObject:atIndexPath:collectionView: selector from the NICollectionViewCell - * protocol to ask the object at indexPath in the model what its size should be. If a class mapping - * has been made for the given object in this factory then that class mapping will be used over the - * result of cellClass from the NICollectionViewCellObject protocol. - * - * If the cell returns a size of zero then collectionViewLayout.itemSize will be used. - * - * Example implementation: - * -@code -- (CGSize)collectionView:(UICollectionView *)collectionView - layout:(UICollectionViewLayout*)collectionViewLayout - sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - return [NICollectionViewCellFactory collectionView:collectionView layout:collectionViewLayout sizeForItemAtIndexPath:indexPath model:self.model]; -} -@endcode - * - * @param collectionView The collection view within which the item exists. - * @param layout The layout of the collection view. - * @param indexPath The location of the cell in the collection view. - * @param model The backing model being used by the collection view. - * @returns The size of the cell mapped to the object at indexPath, if it implements - * sizeForObject:atIndexPath:tableView:; otherwise, returns - * collectionViewLayout.itemSize. - */ -+ (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model; ++ (Class)collectionViewCellClassForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model; @end @@ -195,34 +139,6 @@ _model.delegate = (id)[NICollectionViewCellFactory class]; */ - (BOOL)shouldUpdateCellWithObject:(id)object; -@optional - -/** - * Asks the receiver to calculate its size. - * - * The following is an appropiate implementation in your collectionView's delegate: - * -@code -- (CGSize)collectionView:(UICollectionView *)collectionView - layout:(UICollectionViewLayout*)collectionViewLayout - sizeForItemAtIndexPath:(NSIndexPath *)indexPath { - CGFloat size = collectionViewLayout.itemSize; - id object = [(NICollectionViewModel *)collectionView.dataSource objectAtIndexPath:indexPath]; - id class = [object collectionViewCellClass]; - if ([class respondsToSelector:@selector(sizeForObject:atIndexPath:collectionView:)]) { - size = [class sizeForObject:object atIndexPath:indexPath collectionView:collectionView]; - } - return size; -} -@endcode - * - * You may also use the - * @link NICollectionViewCellFactory::collectionView:sizeForRowAtIndexPath:model: collectionView:sizeForRowAtIndexPath:model:@endlink - * methods on NICollectionViewCellFactory to achieve the same result. Using the above example allows you to - * customize the logic according to your specific needs. - */ -+ (CGSize)sizeForObject:(id)object atIndexPath:(NSIndexPath *)indexPath collectionView:(UICollectionView *)collectionView; - @end /** diff --git a/src/collections/src/NICollectionViewCellFactory.m b/src/collections/src/NICollectionViewCellFactory.m index 5462922ae..a039b22e0 100644 --- a/src/collections/src/NICollectionViewCellFactory.m +++ b/src/collections/src/NICollectionViewCellFactory.m @@ -141,41 +141,20 @@ - (void)mapObjectClass:(Class)objectClass toCellClass:(Class)collectionViewCellC /////////////////////////////////////////////////////////////////////////////////////////////////// -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model { - CGSize size = CGSizeZero; - if ([collectionViewLayout respondsToSelector:@selector(itemSize)]) { - size = [(id)collectionViewLayout itemSize]; - } +- (Class)collectionViewCellClassForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model { id object = [model objectAtIndexPath:indexPath]; - Class collectionViewCellClass = [self collectionViewCellClassFromObject:object]; - if ([collectionViewCellClass respondsToSelector:@selector(sizeForObject:atIndexPath:collectionView:)]) { - CGSize cellSize = [collectionViewCellClass sizeForObject:object atIndexPath:indexPath collectionView:collectionView]; - if (cellSize.width > 0 && cellSize.height > 0) { - size = cellSize; - } - } - return size; + return [self collectionViewCellClassFromObject:object]; } /////////////////////////////////////////////////////////////////////////////////////////////////// -+ (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model { - CGSize size = CGSizeZero; - if ([collectionViewLayout respondsToSelector:@selector(itemSize)]) { - size = [(id)collectionViewLayout itemSize]; - } ++ (Class)collectionViewCellClassForItemAtIndexPath:(NSIndexPath *)indexPath model:(NICollectionViewModel *)model { id object = [model objectAtIndexPath:indexPath]; Class collectionViewCellClass = nil; if ([object respondsToSelector:@selector(collectionViewCellClass)]) { collectionViewCellClass = [object collectionViewCellClass]; } - if ([collectionViewCellClass respondsToSelector:@selector(sizeForObject:atIndexPath:collectionView:)]) { - CGSize cellSize = [collectionViewCellClass sizeForObject:object atIndexPath:indexPath collectionView:collectionView]; - if (cellSize.width > 0 && cellSize.height > 0) { - size = cellSize; - } - } - return size; + return collectionViewCellClass; } @end