2013-02-24 84 views
0

我试图让用户在我的tableview中点击一行后,立即开始动画指示。我的问题是活动指示灯不能立即开始动画。我的理解是UI未更新,并且在didSelectRowAtIndexPath中的所有操作都完成之前,活动指示器才开始动画。在didSelectRowAtIndexPath上显示加载图像

如何编辑此代码块,以便在用户单击某一行时对活动指示器进行正确的动画设置?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath 
*)indexPath 
{ 

// Activity Indicator 
[activityIndicator startAnimating]; 

NSDictionary *item; 

if (tableView == self.searchDisplayController.searchResultsTableView) { 
    item = [[NSDictionary alloc] initWithDictionary:[filteredListItems 
    objectAtIndex:indexPath.row]]; 
} else { 
    item = [[NSDictionary alloc] initWithDictionary:[listItems 
    objectAtIndex:indexPath.row]]; 
} 

//Push to New View Controller 
DetailViewController *detailViewController = [[DetailViewController alloc] 
initWithNibName:@"DetailViewController" bundle:nil]; 
profileViewController.newsArticle = item; 
[self.navigationController pushViewController:detailViewController animated:YES]; 
} 

我一直在摆弄这些代码,但不知道如何将它们联系在一起。任何帮助将是伟大的!谢谢!

[self performSelector:@selector(pushDetailView:) withObject:tableView afterDelay:0.1]; 

- (void)pushDetailView:(UITableView *)tableView { 
    // Push the detail view here 
} 
+0

您是否尝试将加载图像显示在单独的线程上?这可以解决您的问题,因为当您点击单元格并在同一个线程上执行所有操作时(“继续”并显示加载屏幕),该视图将不会更新,直到完成。 – Groot 2013-02-24 01:56:22

+0

嗨菲利普,我不知道该怎么去做。你有一个例子吗?谢谢! – Brandon 2013-02-24 02:29:44

+0

什么是您的加载图片?这是你正在下载的图像,还是你在捆绑中的图像?图像视图是在一个单元格中还是很多? – rdelmar 2013-02-24 02:46:40

回答

3

可能不是一个解决方案,但可能的解决方法。

移动你的“这里的代码的其余部分”,以一个单独的方法,并使用

self performSelector: withObject: afterDelay: 

我希望这将让你加载图像以进行选择之前出现的延迟调用它。

更新:

我建议你喜欢的东西下面,确定项目把它传递给延迟法和其余的事情交给它了。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath 
                   *)indexPath 
{ 

// Activity Indicator 
[activityIndicator startAnimating]; 

NSDictionary *item; 
if (tableView == self.searchDisplayController.searchResultsTableView) { 
    item = [[NSDictionary alloc] initWithDictionary:[filteredListItems 
                objectAtIndex:indexPath.row]]; 
} else { 
    item = [[NSDictionary alloc] initWithDictionary:[listItems 
                objectAtIndex:indexPath.row]]; 
} 

[self performSelector:@selector(pushDetailView:) withObject:item afterDelay:0.1]; 
} 

- (void)pushDetailView:(id)item { 
// Push the detail view here 


//Push to New View Controller 
DetailViewController *detailViewController = [[DetailViewController alloc] 
               initWithNibName:@"DetailViewController" bundle:nil]; 
profileViewController.newsArticle = item; 
[self.navigationController pushViewController:detailViewController animated:YES]; 
} 
+0

嗨Galaxy,我想我正在朝着正确的方向前进。请参阅我的更新代码。任何帮助将是伟大的!谢谢! – Brandon 2013-02-24 03:02:07

+1

请看我的更新 – Saran 2013-02-24 03:20:30