我正在构建一个带有非常类似于内置邮件应用程序的GUI的RSS阅读器。它使用Core Data在下载后存储信息。下载故事时,它有一个蓝点表示它是新的。一旦我读完一个故事后回到主页,这个点就应该消失了。它一直呆在那里,直到我滚动或重新启动应用程序。在viewWillAppear:
方法中,我调用[self.tableView reloadData];
成功调用所有可见单元格的cellForRowAtIndexPath:
。这是我的cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"StoryCellIdentifier";
StoryCell *cell = (StoryCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[NSBundle mainBundle] loadNibNamed:@"StoryCell" owner:self options:nil] objectAtIndex:0];
}
NSUInteger thisRow = [indexPath row];
NSManagedObject *managedObject = [storyData objectAtIndex:thisRow];
cell.titleLabel.text = [[managedObject valueForKey:@"title"] description];
cell.descLabel.text = [[managedObject valueForKey:@"subTitle"] description];
if (!([managedObject valueForKey:@"new"]))
{
cell.readIndicator.image = nil;
}
return cell;
}
该程序应该按cell.readIndicator.image = nil;
行。事实上,当点和不存在时,程序遵循相同的执行路径。此外,这可能是相关的,但当我点击导航控制器时,我点击的单元格仍然会突出显示。
编辑:与.xib对应的.m文件只是样板文件。
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier])
{ }
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
}
EDIT2:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
StoryView *storyView = [[StoryView alloc] initWithNibName:@"StoryView" bundle:nil];
NewsItem *item = [storyData objectAtIndex:[indexPath row]];
[storyView viewLoaded:item];
// Pass the selected object to the new view controller.
// ...
item.new = NO;
[managedObjectContext save:nil];
[self.navigationController pushViewController:storyView animated:YES];
[storyView release];
}
答案 0 :(得分:1)
可能是一个单独的错误的一件事是,如果具有已读取项目的单元格被重新用于显示未读取项目,则您的单元格将显示错误...您需要执行类似
if (!([managedObject valueForKey:@"new"]))
{
cell.readIndicator.image = nil;
}
else
{
cell.readIndicator.image = blueDotImage;
}
而不是假设在创建单元格时将蓝点图像放在那里。
对于非显示部分,我想知道你是否需要调用setNeedsDisplay
- 当你更改readIndicator
的图像时,单元格可能没有意识到它需要重新绘制
答案 1 :(得分:0)
对于弹出VC时突出显示的单元格,请参阅this
对于主要问题,也许您应该发布自定义表格单元格代码的相关部分供我们查看。
答案 2 :(得分:0)
你的viewWillAppear
方法被解雇了吗?尝试将[table reloadData]
语句添加到didSelectRowAtIndexPath
方法,看看是否有效。
我遇到了viewWillAppear
方法并不总是被调用的问题。结帐this thread了解详情。