将 UICollectionView 添加为 UICollectionReusableView reloadData 的子视图不起作用,我想念什么?
add UICollectionView as subview of UICollectionReusableView reloadData not work, what I miss?
我尝试在运行时将 UICollectionView 添加到我的自定义 UICollectionReusableView,在主窗体中,当用户在 mainView 中执行 select 单元格时,我有一个 UICollectionView(名为 mainView)向用户显示一级菜单它将在脚部展开二级菜单(并调用FolderContentView::loadSubMenus方法),
以下是我不会工作的代码,请帮忙。
.h 文件
@interface FolderContentView : UICollectionReusableView<UICollectionViewDataSource,UICollectionViewDelegate>
-(void) loadSubMenus:(NSArray<EnabledModule*>*) subModules;
@end
.m 文件
#import "FolderContentView.h"
@implementation FolderContentView {
UICollectionView *_collectionView;
NSArray* _subMenus;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake(100, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
_collectionView = [[UICollectionView alloc] initWithFrame:frame collectionViewLayout:flowLayout];
[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
_collectionView.delegate = self;
_collectionView.dataSource = self;
}
[_collectionView reloadData];
return self;
}
-(void) loadSubMenus:(NSArray<EnabledModule*>*) subModules {
if(subModules != nil) {
_subMenus = [subModules copy];
} else {
_subMenus = nil;
}
[_collectionView reloadData];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return _subMenus!=nil?_subMenus.count:0;
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"cell"
forIndexPath:indexPath];
if(!cell){
cell=[[UICollectionViewCell alloc]init];
}
EnabledModule *model = _subMenus[indexPath.row];
cell.hidden = !model.enabled;
UILabel *lblText = [[UILabel alloc] init];
lblText.text = model.moduleName;
[cell.contentView addSubview:lblText];
return cell;
}
@end
- 尝试从主线程重新加载数据,它不会工作。
- 将 bp 设置为 numberOfItemsInSection numberOfItemsInSection,不是提示。
- 尝试将 delegate 和 dataSource 设置到我的 mainView 的控制器,但也行不通。
'reloadData not work'到底是什么意思?委托方法 运行 正确还是什么都没发生?
1.Maybe 你应该检查代码 'add UICollectionView to my custom UICollectionReusableView in runtime'。
2.Maybe你忘了做:
[self addSubview:_collectionView];
3.The 'cell' 在此代码中不会为零:
UICollectionViewCell *cell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"cell"
forIndexPath:indexPath];
if(!cell){
cell=[[UICollectionViewCell alloc]init];
}
4.Don不要这样做:
[cell.contentView addSubview:lblText];
改为使用 UICollectionViewCell 的子类。
我尝试在运行时将 UICollectionView 添加到我的自定义 UICollectionReusableView,在主窗体中,当用户在 mainView 中执行 select 单元格时,我有一个 UICollectionView(名为 mainView)向用户显示一级菜单它将在脚部展开二级菜单(并调用FolderContentView::loadSubMenus方法), 以下是我不会工作的代码,请帮忙。
.h 文件
@interface FolderContentView : UICollectionReusableView<UICollectionViewDataSource,UICollectionViewDelegate>
-(void) loadSubMenus:(NSArray<EnabledModule*>*) subModules;
@end
.m 文件 #import "FolderContentView.h"
@implementation FolderContentView {
UICollectionView *_collectionView;
NSArray* _subMenus;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake(100, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
_collectionView = [[UICollectionView alloc] initWithFrame:frame collectionViewLayout:flowLayout];
[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
_collectionView.delegate = self;
_collectionView.dataSource = self;
}
[_collectionView reloadData];
return self;
}
-(void) loadSubMenus:(NSArray<EnabledModule*>*) subModules {
if(subModules != nil) {
_subMenus = [subModules copy];
} else {
_subMenus = nil;
}
[_collectionView reloadData];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return _subMenus!=nil?_subMenus.count:0;
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"cell"
forIndexPath:indexPath];
if(!cell){
cell=[[UICollectionViewCell alloc]init];
}
EnabledModule *model = _subMenus[indexPath.row];
cell.hidden = !model.enabled;
UILabel *lblText = [[UILabel alloc] init];
lblText.text = model.moduleName;
[cell.contentView addSubview:lblText];
return cell;
}
@end
- 尝试从主线程重新加载数据,它不会工作。
- 将 bp 设置为 numberOfItemsInSection numberOfItemsInSection,不是提示。
- 尝试将 delegate 和 dataSource 设置到我的 mainView 的控制器,但也行不通。
'reloadData not work'到底是什么意思?委托方法 运行 正确还是什么都没发生?
1.Maybe 你应该检查代码 'add UICollectionView to my custom UICollectionReusableView in runtime'。
2.Maybe你忘了做:
[self addSubview:_collectionView];
3.The 'cell' 在此代码中不会为零:
UICollectionViewCell *cell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"cell"
forIndexPath:indexPath];
if(!cell){
cell=[[UICollectionViewCell alloc]init];
}
4.Don不要这样做:
[cell.contentView addSubview:lblText];
改为使用 UICollectionViewCell 的子类。