在didSelectRowAtIndexPath上显示加载图像

时间:2013-02-24 01:47:46

标签: iphone ios objective-c xcode uitableview

我试图让用户点击我的tableview中的一行时,我的活动指示器就开始动画了。我的问题是活动指示器不会立即开始制作动画。我的理解是,在完成didSelectRowAtIndexPath中的所有操作之前,UI不会更新,并且活动指示器不会开始动画。

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

- (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
}

1 个答案:

答案 0 :(得分: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];
}