添加UICollectionView作为UICollectionReusableView的子视图reloadData不起作用,我想念的是什么?

时间:2017-08-22 16:45:13

标签: ios objective-c uicollectionview uicollectionreusableview

我尝试在运行时将UICollectionView添加到我的自定义UICollectionReusableView,在主窗体中我有一个UICollectionView(名为mainView)向用户显示第一级菜单,当用户在mainView中选择单元格时它会扩展第二级脚部分中的级别菜单(并调用FolderContentView :: loadSubMenus方法), 以下是我不会工作的代码,请帮忙。

.h文件

@interface FolderContentView : UICollectionReusableView<UICollectionViewDataSource,UICollectionViewDelegate>

   -(void) loadSubMenus:(NSArray<EnabledModule*>*) subModules;

@end

.m文件     #import&#34; FolderContentView.h&#34;

@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
  1. 从主线程尝试reloadData,它不会工作。
  2. 将bp设置为 numberOfItemsInSection numberOfItemsInSection ,而非提示。
  3. 尝试将delegate和dataSource设置为我的mainView控制器,但也不行。

1 个答案:

答案 0 :(得分:1)

什么&#39; reloadData不能正常工作&#39;实际意味着?委托方法是否正确运行或没有发生任何事情?


1.也许你应该检查代码并在运行时将UICollectionView添加到我的自定义UICollectionReusableView中。

2.也许你忘记了:

[self addSubview:_collectionView];

3.The&#39; cell&#39;在这段代码中不会是零:

UICollectionViewCell *cell = [collectionView
                                  dequeueReusableCellWithReuseIdentifier:@"cell"
                                  forIndexPath:indexPath];
if(!cell){
    cell=[[UICollectionViewCell alloc]init];
}

4.不要这样做:

[cell.contentView addSubview:lblText];

改为使用UICollectionViewCell的子类。