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 に答える