我有一个简单的应用Tab Bar Controller
,其中第一个tab
是UITableViewController
(时间轴),第二个tab
也是UITableViewController
(设置)。
在“设置”中,用户可以点击“主题”cell
,然后转到UICollectionView
,每行包含3个单元格和4行。
cells
包含NSArrays
viewDidLoad
中UICollectionView
填充的图片和标签。
当我选择一个单元格时,我有一个自定义图像(在单元格顶部),我注意到在某些情况下,如果我选择一个单元格并转到另一个标签(时间轴)并再次返回,所选单元格的自定义图像不会再次出现。
但是,如果我选择一个单元格然后通过弹出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会起作用。
对这个奇怪的错误的任何指导都会非常感激。
答案 0 :(得分:0)
问题解决了。我没有使用属性来设置图像,而是在cellForItem中创建具有相同功能的新图像。问题已修复。