2010-02-06 99 views
0

我有一个小问题,似乎困扰着我。 我的UITableViewController子类在TableViewCell的选择上以异步方式加载数据。像这样...UITableViewCell中的UIActivityIndi​​cator不显示在“setSelected”

- (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子类才能正确通知,创建一个新的视图,并将其推到其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

如果您使用的核心数据(即使是一个简单的内存数据库,如果你不需要坚持到磁盘)结合了NSFetchedResultsController那么你不不必处理所有的问题泰特管理。

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

所有这些与一个简单和正式的协议。

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

+0

啊,我不使用核心数据..不幸的是, – samsam 2010-12-17 10:34:29

相关问题