0

我试图让我的活动指示器在用户单击我的表格视图中的一行时立即开始动画。我的问题是活动指示器没有立即开始动画。我的理解是 UI 不会更新,并且活动指示器不会开始动画,直到 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
}
4

1 回答 1

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];
}
于 2013-02-24T02:34:44.927 回答