当视图重新出现在某些单元格上时,选定的UICollectionViewCell不会突出显示图像

时间:2014-04-09 16:01:27

标签: ios uicollectionview uicollectionviewcell viewwillappear

我有一个简单的应用Tab Bar Controller,其中第一个tabUITableViewController(时间轴),第二个tab也是UITableViewController(设置)。

在“设置”中,用户可以点击“主题”cell,然后转到UICollectionView,每行包含3个单元格和4行。

cells包含NSArrays viewDidLoadUICollectionView填充的图片和标签。

当我选择一个单元格时,我有一个自定义图像(在单元格顶部),我注意到在某些情况下,如果我选择一个单元格并转到另一个标签(时间轴)并再次返回,所选单元格的自定义图像不会再次出现。

但是,如果我选择一个单元格然后通过弹出segue(推送)然后返回到UICollectionView返回设置,则会出现勾选。

澄清:步骤是:

1)选择主题

2)该单元格上出现自定义图像(勾号)

3)返回时间线(不返回设置)

4)返回第二个选项卡,仍然加载了UICollectionView

5)勾选不存在*

*这只发生在12张图片中的大约8张中,但是说,其中4张正在工作,这让我很困惑。

以下是cellForItem中的代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    ThemeCell *ThemeCell = (ThemeCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Theme Cell" forIndexPath:indexPath];
    NSString *cellData = [self.themeLabels objectAtIndex:indexPath.row];
    UIImageView *dot = [[UIImageView alloc]initWithFrame:CGRectMake(5, 0, 1, 2)];
    dot.image=[UIImage imageNamed:@"Tick.png"];
    themeCell.cellLabel.text = cellData;
    themeCell.cellImages.image = self.themeImages[indexPath.row];

    self.selectedThemeString = [[NSUserDefaults standardUserDefaults] objectForKey:@"Selection"];

    NSLog(@"Selected Theme String = %@", self.selectedThemeString);

    if (!self.selectedThemeString)
    {        
        self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
        themeCell.backgroundView = dot;
        [themeCell addSubview:dot];
    }

    if([self.checkedIndexPath isEqual:indexPath])
    {
        NSLog(@"Loaded");
        themeCell.backgroundView = self.checkmark;
        [themeCell addSubview:self.checkmark];
    }
    else
    {
        NSLog(@"Not Loaded");
        themeCell.backgroundView = nil;
    }
return themeCell; 

以下是我在viewWillAppear中添加的一些自定义代码:

    self.selectedThemeString = [[NSUserDefaults standardUserDefaults] objectForKey:@"Selection"];

    if ([self.selectedThemeString isEqualToString:@"Original"])
    {
        NSLog(@"1...");
        self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Peacock"])
    {
        NSLog(@"2...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:1 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Mystical"])
    {
        NSLog(@"3...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:2 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Zebra"])
    {
        NSLog(@"4...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:3 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Simplicity"])
    {
        NSLog(@"5...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:4 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Rainbow"])
    {
        NSLog(@"6...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:5 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Prosperity"])
    {
        NSLog(@"7...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:6 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Leopard"])
    {
        NSLog(@"8...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:7 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Hypnotic"])
    {
        NSLog(@"9...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:8 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Dunes"])
    {
        NSLog(@"10...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:9 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Twirl"])
    {
        NSLog(@"11...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:10 inSection:0];
    }
    else if ([self.selectedThemeString isEqualToString:@"Oceanic"])
    {
        NSLog(@"12...");

        self.checkedIndexPath = [NSIndexPath indexPathForRow:11 inSection:0];
    }


    [self.cView reloadData];
}

所以我可以告诉你,例如,“Zebra”是受影响的单元格之一,它出现在第二行的第一个单元格(我假设它是indexPathforRow:4和inSection:0因为没有部分。

但是,当我回到时间轴并回到UICollectionView时,Simplicity会起作用。

对这个奇怪的错误的任何指导都会非常感激。

1 个答案:

答案 0 :(得分:0)

问题解决了。我没有使用属性来设置图像,而是在cellForItem中创建具有相同功能的新图像。问题已修复。