我不知道为什么我的UITableViewController
和UICollectionViewController
图形操作无效。
我对两者都有同样的问题。
这是我想要使用的代码,但我尝试使用更简单的代码,但不能正常工作
-(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和类似的代码中遇到了类似的问题。
答案 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,该方法始终引用模型,现在由选择更新。