无法更改UITableViewCell和UICollectionViewCell中的内容

时间:2016-09-10 23:24:46

标签: ios objective-c uitableview uicollectionview uicollectionviewcell

我不知道为什么我的UITableViewControllerUICollectionViewController图形操作无效。

我对两者都有同样的问题。

这是我想要使用的代码,但我尝试使用更简单的代码,但不能正常工作

-(void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

UICollectionViewCell* cell=[self collectionView:collectionView cellForItemAtIndexPath:indexPath];

id someInCell=[cell viewWithTag:1];

if ([someInCell isKindOfClass:[UIImageView class]]) {

    UIImageView* imageViewOfCell=(UIImageView*)someInCell;

    id someInArray=[self.arrayOfUUID objectAtIndex:(indexPath.row)];

    if ([someInArray isKindOfClass:[NSUUID class]]) {
        NSUUID* UUID=(NSUUID*)someInArray;
        Itinerari* itinerario=[self.contenitore itineraryWithUUID:UUID];
        imageViewOfCell.image=[UIImage imageNamed:@"2"];
        NSLog(@"ok");

    }
}

}

控制台给了我“好的”#39;消息,但我的imageView图像没有改变。

我在UITableViewCell和类似的代码中遇到了类似的问题。

1 个答案:

答案 0 :(得分:0)

是的,如果您应用此关键想法,代码可以简化并正常运行:不要获取单元格并更新它们。而是更改您的数据源并告诉表(或集合)它必须更新。

数据源应该保留一个对象数组,这些(模型)对象应该描述所有,这些在不同的单元格之间变化(表格的行到行)。因此,例如,具有标签和图像视图的表需要包含字符串和图像的数组,可能是这样的:

NSArray *model = @[
    [@{ @"text": @"cell0", @"image": [UIImage imageNamed:@"image0"] } mutableCopy],
    [@{ @"text": @"cell1", @"image": [UIImage imageNamed:@"image1"] } mutableCopy],
    // etc
]

如果它是NSObject子类的数组,那就更好了,这是你的app的模型,而不是一个可变的字典。

您的单元格或行计数方法应返回[model count];,而您在indexPath方法中的单元格或行应始终执行此操作...

NSDictionary *d = self.model[indexPath.row];
cell.label.text = d[@"text"];   // if your cell has a label in this e.g.
cell.imageViewOfCell.image = d[@"image"];

通过这种方式,可以轻松更改集合或表格视图:更改数据源并告知视图更新:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSMutableDictionary *d = self.model[indexPath.row];
    d[@"image"] = [UIImage imageNamed:@"2"];
    [collectionView reloadData];
} 

视图将调用单元格/行atIndexPath,该方法始终引用模型,现在由选择更新。