我试图让用户点击我的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
}
答案 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];
}