2014-09-23 3 views
2

Я заметил iOS, это очень важно при использовании UICollectionView внутри UITableViewCell. То, что я пытаюсь достичь, это иметь коллекцию изображений (UICollectionView) внутри UITableViewCell. Я пытаюсь имитировать Facebook поста стиля, я думаю, у них есть UITableView, с помощью пользовательских ячеек и так далее, но вот проблемы ...UICollectionView внутри UITableViewCell

мне удалось поставить UICollectionView внутри UITableViewCell, и он работал правильно и отлично, без проблем, все отлично видно, оно доступно для кликов и так далее. НО, я пытался реорганизовать свой код, извлекая UICollectionViewDataSource & UICollectionViewDelegate в отдельные файлы для их повторного использования и имеющих меньше коды на Main View Controller, именно здесь, когда мой кошмар начался, я не знаю, почему, если Я использую отдельные файлы. IOS Циклы конфигурации ячеек. Например:

-(void)configureCell:(UICollectionViewCell*)customCell atIndexPath:(NSIndexPath*)indexPath; 

Вышеописанный способ его называют на две части процесса:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
NSString *identifier = [self retrieveIdentifierForIndexPath:indexPath]; 
UITableViewCell *myCell = [tableView dequeueReusableCellWithIdentifier:identifier]; 
[self configureCell:myCell atIndexPath:indexPath]; 
[cell setNeedsLayout]; 
[cell layoutIfNeeded]; 
[cell setNeedsUpdateConstraints]; 
[cell updateConstraintsIfNeeded]; 
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingExpandedSize].height; 
return height; 
} 

выше метод он вызывается для расчета высоты строки с помощью AutoLayout я прочитал это на сообщение здесь StackOverflow (не помню пост :()

После высоты он расчете и так далее, другой метод называет «configureCell» метод:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *rowName = [self retrieveIdentifierForIndexPath:indexPath]; 
    PostDetailTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:rowName forIndexPath:indexPath]; 

    //PreCondition 
    if([rowName isEqualToString:@"LoadingRow"]){ 
     return cell; 
    } 

    // Configure the cell... 
    [self configureCell:cell atIndexPath:indexPath withImages:YES]; 

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

    return cell; 
} 

При запуске отладчика, метод configureCell:atIndexPath: его называют снова и снова и снова. это второй раз, когда это происходит. Означает ли это, что я не могу «отделить» DataSource? Или НЕВОЗМОЖНО, чтобы добавить UICollectionView внутри UITableViewCell. Или я использую плохой подход? Есть ли способ сделать это?

Я очень смущен об этом ...

Спасибо, ребята!

+0

Та же проблема, с которой я столкнулся. Пока не получил решения. –

+0

Непросто пройти через всю конфигурацию ячейки, чтобы просто определить высоту строки. –

+0

Не знаю, как рассчитать высоту:/все примеры, которые я видел, рекомендовали сделать это – NemesisDoom

ответ

2

Я боролся с этим в течение очень долгого времени, часами перепроектирования макетах, и т.д., и т.д. И я, наконец, получил решение:

Это заголовок файла Келейное

@interface MyCustomTableViewCell : UITableViewCell 
@property (strong, nonatomic) IBOutlet UILabel *someLabel; 
@property (strong, nonatomic) IBOutlet UICollectionView *collectionView; 

-(void)setImages:(NSArray*)images; 
@end 

и вот Волшебство за все этот файл по осуществлению (м)

@interface MyCustomTableViewCell() <UICollectionViewDataSource, UICollectionViewDelegate> 
@property (strong, nonatomic) NSArray *imageArray; 
@end 
@implementation MyCustomTableViewCell 
-(void)setImages:(NSArray*)images{ 
_imageArray = images; 
[_collectionView setDataSource:self]; 
[_collectionView setDelegate:self]; 
[_collectionView reloadData]; 
} 

#pragma mark - UICollectionViewDataSource Methods 
... 
... 
... 
#pragma mark - UICollectionViewDelegate Methods 
... 
... 
... 
@end 

Используя вышеописанный подход сделал CollectionView шоу, а также показать его содержание.Я также хотел бы добавить действие в CollectionView, например, показывая MWPhotoBrowser когда изображение этого времени щелкнуло, я добавил метод в файл заголовок ячейки:

-(void)setViewController:(UIViewController*)viewController; 

Seted Это на файл по внедрению и называется MWPhotoBrowser о методах делегата. Я знаю, что это действительно странно, потому что это заставляет меня использовать Cell для отображения DataSource & Делегат. Когда я должен буду перерабатывать свой DataSource & Делегат в других точках, странный. Но это сработало!

Спасибо, ребята!

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