Делегат 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