[英]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项更改对我有用。
在ShopCollCell.xib中,将tableView委托和数据源映射到ShopCollectionCell
类而不是File的所有者。
在ShopCollectionCell.m中实现initWithCoder:
方法。
在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.