繁体   English   中英

UICollectionViewCell里面的UITableView

[英]UITableView inside UICollectionViewCell

我想在UICollectionViewCell中包含UITableView。 然后,我将通过UICollectionViewCell的子类动态更改UITableView的内容。

我的UICollectionViewCell .h子类如下所示:

@interface ShopCollectionCell : UICollectionViewCell <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, weak) IBOutlet UILabel *myLabel;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end

在.m中只是标准的UITableView方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"bla"];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"bla"];
    }

    cell.textLabel.text = @"test";
    return cell;
}

在我的UIViewController中,我有一个UICollectionView,在其中执行以下操作:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    ShopCollectionCell *cell = (ShopCollectionCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"shopDetailCell" forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[ShopCollectionCell alloc] init];//:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.myLabel.text = @"test";

    return cell;
}

我不明白为什么我会得到僵尸对象?

在此处输入图片说明

为了能够使用dequeueReusableCellWithReuseIdentifier:forIndexPath您还需要为该单元格标识符注册一个类或一个笔尖。

在viewDidLoad中,您应该使用下面的两个UITableView方法之一来注册一个单元格

registerNib:forCellReuseIdentifier:
registerClass:forCellReuseIdentifier:

查看UITableView文档以获取有关如何使用它们的更多详细信息

然后,您应该可以完全删除以下几行:

   if (cell == nil) {
        cell = [[ShopCollectionCell alloc] init];//:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

更新:您发布给我的错误消息使您很容易找出问题所在。 您以拥有者“ self”的身份加载了NIB,然后用从NIB加载的第一个视图替换了self。 我将UIView用作NIB中的rootview,并将该加载的视图添加到单元格的contentView属性中。

尝试删除集合视图单元格的alloc和init。 dequeueReusableCellWithReuseIdentifier是足够的。 从苹果文档:

如果有一个可用的单元格,此方法将使该单元出队,或者根据您先前注册的类或nib文件创建一个新的单元格。

进行以下3项更改对我有用。

  1. 在ShopCollCell.xib中,将tableView委托和数据源映射到ShopCollectionCell类而不是File的所有者。

  2. 在ShopCollectionCell.m中实现initWithCoder:方法。

  3. 在ShopCollectionCell.m中,实现awakeFromNib方法并在此处为mytableView注册UITableViewCell类。

     - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { } return self; } - (void)awakeFromNib { [self.myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"bla"]; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM