在尝试使用tableView中的自定义单元格中的自定义单元格实现UICollectionView时遇到了一些问题。 我有自定义表格视图单元格工作正常,显示我想要的标签。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
TemperatureTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath: indexPath];
Node *node = [[Node alloc] init];
if(_nodes != nil){
node = [_nodes objectAtIndex:indexPath.row];
if(_tempSensorsDictionary.count > 0){
NSArray *allSensors = [_tempSensorsDictionary objectForKey:node.number];
TemperatureSensor *ts = allSensors[0];
if(node.name != nil && ![node.name isEqual: @""]){
cell.unitNameLabel.text = node.name;
} else {
cell.unitNameLabel.text = node.number;
}
cell.collection = [_tempSensorsDictionary objectForKey:node.number];
}
}
return cell;
}
我已将CollectionView背景设置为灰色,我可以看到此“框”。所以我想我在我推出的TemperatureTaleViewCell
类中正确初始化了CollectionView:
@implementation TemperatureTableViewCell
-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (!(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) return nil;
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
[flowLayout setItemSize:CGSizeMake(50, 50)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
self.collectionView = [[CollectionView alloc] initWithFrame: CGRectZero collectionViewLayout:flowLayout];
[self.collectionView registerClass:[TemperatureItemCollectionViewCell class] forCellWithReuseIdentifier:@"TemperatureItemCollectionCell"];
self.collectionView.showsHorizontalScrollIndicator = NO;
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
[self.collectionView reloadData];
[self.contentView addSubview:self.collectionView];
return self;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 2;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
TemperatureItemCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TemperatureItemCollectionCell" forIndexPath:indexPath];
cell.tempValTempCollViewCell.text = @"21oC";
cell.backgroundColor = [UIColor redColor];
return cell;
}
@end
但是我的表视图看起来像这样:
我的代码有什么问题,错误的方向在哪里?
答案 0 :(得分:2)
需要在tableview cellForRowAtIndexPath 方法中重新加载集合视图数据。
-(void)tableView:(UITableView *)tableView willDisplayCell:(CategoryCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell setCollectionViewDelegate:self indexPath:indexPath];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
TemperatureTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath: indexPath];
Node *node = [[Node alloc] init];
if(_nodes != nil){
node = [_nodes objectAtIndex:indexPath.row];
if(_tempSensorsDictionary.count > 0){
NSArray *allSensors = [_tempSensorsDictionary objectForKey:node.number];
TemperatureSensor *ts = allSensors[0];
if(node.name != nil && ![node.name isEqual: @""]){
cell.unitNameLabel.text = node.name;
} else {
cell.unitNameLabel.text = node.number;
}
cell.collection = [_tempSensorsDictionary objectForKey:node.number];
//Reload collection view data
[cell.collectionView reloadData];
}
}
return cell;
}
使用表格视图initWithStyle方法的 awakeFromNib 方法。
- (void)awakeFromNib
{
[super awakeFromNib];
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
[flowLayout setItemSize:CGSizeMake(50, 50)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
self.collectionView = [[CollectionView alloc] initWithFrame: CGRectZero collectionViewLayout:flowLayout];
[self.collectionView registerClass:[TemperatureItemCollectionViewCell class] forCellWithReuseIdentifier:@"TemperatureItemCollectionCell"];
self.collectionView.showsHorizontalScrollIndicator = NO;
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
[self.contentView addSubview:self.collectionView];
}
在 TemperatureTaleViewCell 类
中设置集合视图的委托- (void)setCollectionViewDelegate:(id)dataSourceDelegate indexPath:(NSIndexPath *)indexPath
{
self.collectionView.delegate = dataSourceDelegate;
}
答案 1 :(得分:1)
正如我所看到的,您通过XIB /故事板设计了TemperatureTaleViewCell,并通过
创建了单元格 strcpy(oldnp, oldpath);
strcat(oldnp, "/");
strcat(oldnp, get_between_delimiter(commande[cnt] , 0));
strcat(oldnp, ".png");
source = fopen(oldnp, "r");
if ((source = fopen(oldnp, "r")) == NULL)
file_found();
else
;?
到目前为止还可以,但是你在initWithStyle中设置了collectionView的委托和dataSource,在这种情况下不会调用它。因此,不会调用您的集合视图的委托和数据源方法。