Делегат UICollectionView должен соответствовать протоколу CHTCollectionViewDelegateWaterfallLayout

Я использую контроллер представления с UITabbar внутри и вставляю подпредставление, которое имеет CHTCollectionViewWaterfallLayout, но я получил ошибку времени выполнения:

Завершение работы приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: "делегат UICollectionView должен соответствовать протоколу CHTCollectionViewDelegateWaterfallLayout"

Я уже объявил CHTCollectionViewDelegateWaterfallLayout и реализовал необходимый метод

Как решить это, любое решение?

Мой первый просмотр кода контроллера здесь:

- (void)viewDidLoad {
[super viewDidLoad];

[self.myTabbar setAlpha:0.95];  

self.myTabbar.delegate = self;  

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
[self.view insertSubview:[storyBoard instantiateViewControllerWithIdentifier:@"tab1"].view belowSubview:self.myTabbar];
[self.myTabbar setSelectedItem:self.myTabbar.items[0]];
self.currentItem = [self.myTabbar selectedItem];}

и вот контроллер представления, у которого есть файл представления.h файл:

#import <UIKit/UIKit.h>
#import "CHTCollectionViewWaterfallLayout.h"

@interface MainViewController : UIViewController <UICollectionViewDataSource, CHTCollectionViewDelegateWaterfallLayout, UICollectionViewDelegate, UICollectionViewDataSourcePrefetching>
@property (strong, nonatomic) IBOutlet UICollectionView *collectionViewController;
@end

и обязательный метод делегата в файле.m:

- (void)viewDidLoad {
[super viewDidLoad];
self.collectionViewController.prefetchDataSource = self;
self.collectionViewController.dataSource = self;
self.collectionViewController.delegate = self;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.item % 2 == 1) {
    CGFloat cellWidth = [UIScreen mainScreen].bounds.size.width /2.2;
    CGFloat cellHeight = cellWidth * 1.6;
    return CGSizeMake(cellWidth, cellHeight);
} else {
    CGFloat cellWidth = [UIScreen mainScreen].bounds.size.width /2.2;
    CGFloat cellHeight = cellWidth * 2;
    return CGSizeMake(cellWidth, cellHeight);
}
}

1 ответ

Пожалуйста, удалите регистрацию <UICollectionViewDelegate> от MainViewController, Ваш MainViewController интерфейс должен выглядеть так -

#import <UIKit/UIKit.h>
#import "CHTCollectionViewWaterfallLayout.h"

@interface MainViewController : UIViewController <UICollectionViewDataSource, CHTCollectionViewDelegateWaterfallLayout, UICollectionViewDataSourcePrefetching>
@property (strong, nonatomic) IBOutlet UICollectionView *collectionViewController;
@end
Другие вопросы по тегам