我正在创建一个 UITableViewController 来列出人的名字,并在他们的名字旁边加上一个星号来表示喜欢的人
触摸时星星会亮起,表示收藏,该单元格的行号进入此方法中调用的 NSMutableArray。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
当我点击一个单元格并将索引添加到数组时,一切正常,直到我向下滚动,并且填充了更多的星星。它们是随机的,我相信,每次我向上然后向下滚动时都会弹出一些弹出窗口,看起来像这样,褪色的星星......
这是满星
不知怎的,不该被填满的星星都褪色了。
我无法确定星星在哪里打开。当我滚动到特定单元格时,日志仅显示将星号设置为打开。
我的问题是星星在不应该打开的时候打开了,我的数组很好,我检查了很多次,它必须是 UITableView。
这是我的代码,
我只有那颗星星的两张图片,一张满的,一张空的,还有
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CustomCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// NSLog(@"%i",[[cell.contentView subviews] count]);
// NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[cell.contentView subviews]];
[tableView reloadData];
UIImageView *star = cell.star;
NSLog(@"Star Tag: %i",star.tag);
if (star.tag == kStarEmpty) {
[[Global sharedGlobal].favTeachers addObject:[NSString stringWithFormat:@"%i",cell.identifierTag]];
NSLog(@"Added: %i",cell.identifierTag);
// NSLog(@"setting star image: 1");
[star setImage:[UIImage imageNamed:@"star.png"]];
[star setTag:kStarFilled];
} else if (star.tag == kStarFilled) {
[[Global sharedGlobal].favTeachers removeObject:[NSString stringWithFormat:@"%i",cell.identifierTag]];
NSLog(@"Removed: %i",cell.identifierTag);
// NSLog(@"setting star image: 2");
[star setImage:[UIImage imageNamed:@"star_empty.png"]];
[star setTag:kStarEmpty];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *teacher = [[Global sharedGlobal].teachers objectAtIndex:indexPath.row];
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
UIImageView *starView = [[UIImageView alloc] init];
starView.image = [UIImage imageNamed:@"star_empty.png"];
starView.frame = CGRectMake(720, 2, 29, 29); //748,22
[starView setTag:kStarEmpty];
cell.star = starView;
[cell addSubview:starView];
cell.identifierTag = indexPath.row;
NSLog(@"This cell's identifier tag: %i",cell.identifierTag);
cell.textLabel.text = [[Global sharedGlobal].teachers objectAtIndex:indexPath.row];
for (int i = 0; i < [[Global sharedGlobal].favTeachers count]; i++) {
int favTeacherTag = [[[Global sharedGlobal].favTeachers objectAtIndex:i] intValue];
NSLog(@"%i",i);
NSLog(@"Fav Teacher Tag: %i",favTeacherTag);
if (cell.identifierTag == favTeacherTag) {
NSLog(@"found fav teacher: %i",cell.identifierTag);
NSLog(@"------------------------------------------");
// NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[cell.contentView subviews]];
NSLog(@"setting star image");
[starView setImage:[UIImage imageNamed:@"star.png"]];
NSLog(@"Previous star tag: %i",starView.tag);
[starView setTag:kStarFilled];
break;
}
NSLog(@"--------------------------------");
}
return cell;
}
额外信息:
cell.identifierTag
我有一个用于单元格的自定义类,它将int
.我正在使用情节提要
我在 Storyboard 中使用静态单元格
谢谢!如果您需要更多信息,请发表评论并询问。