UITableViewCell中的UIActivityIndi​​cator未显示在“setSelected”上

时间:2010-02-06 12:44:53

标签: iphone objective-c

我有一个似乎困扰着我的小问题。 我的UITableViewController子类在选择TableViewCell时以异步方式加载数据。像这样...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"clickROW");

itemData *selectedItemData;;

selectedItemData = [[[DataManager sharedDataManger]getAllDataItems] objectAtIndex:indexPath.row];

[[DataManager sharedMischaManager] loadDataItemDetailsAsync:selectedItemData.Now];

好的,到目前为止一切顺利,loadDataItemDetailsAsync在完成加载后发布通知。然后我的UITableViewController子类被正确通知,创建一个新的View并将其推送到它的NavigationController ..

到目前为止一切正常......

但是,因为异步加载可能需要一段时间(取决于当前的带宽),我希望在加载时显示/动画UIActivityIndi​​catior。

所以我做的是以下(在我的UITableViewCell子类中)

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state


if(selected)
{
    [self.contentView bringSubviewToFront:loader];
    [tvImageView setHidden:YES];
    [loader setHidden:NO];
    [loader startAnimating];
    //[loader performSelectorInBackground: @selector(startAnimating) withObject: nil];      
}
else {
    //[loader performSelectorInBackground: @selector(stopAnimating) withObject: nil];   
    [loader stopAnimating];
    [loader setHidden:YES];
    [tvImageView setHidden:NO];

}

}

我尝试了两种方式来“启动加载器”,performSelectorInBackGround - 方式和简单的[loader startAnimating]方式。它们都不起作用。

有趣的是,tvImageView也没有隐藏。

我想我错过了一个基本的步骤(比如重绘/重新显示,我不知道)我似乎无法自己弄清楚:(

任何帮助,提示,提示veeeery赞赏

欢呼声

SAM

1 个答案:

答案 0 :(得分:1)

如果您使用Core Data(即使您使用简单的内存数据库,如果您不需要持久保存到磁盘)并结合NSFetchedResultsController,那么您不必处理所有状态管理。

您只需对对象进行更改,然后NSFetchedResultsController将通知任何更改对象的委托(您的UITabelViewController应该实现)。在该委托中,您只需更改UITableViewCell,如显示/隐藏活动指示符或状态文本。

这一切都采用简单而正式的协议。

检查NSFetchedResultsControllerDelegate Protocol Reference以获得良好的概述。