Индикаторы активности при нажатии следующего представления - didSelectRowAtIndexPath - PullRequest
3 голосов
/ 14 июня 2011

Я могу успешно нажать только следующий вид в своем приложении для iPhone. Однако из-за того, что следующее представление извлекает данные для заполнения UITableViews, иногда время ожидания может быть несколько секунд или немного больше в зависимости от соединения.

В течение этого времени пользователь может подумать, что приложение зависло и т. Д. Поэтому, чтобы противостоять этой проблеме, я думаю, что реализация UIActivityIndicators была бы хорошим способом сообщить пользователю, что приложение работает.

Может кто-нибудь сказать мне, где я мог бы реализовать это?

Спасибо.

Метод pushDetailView

- (void)pushDetailView {

[tableView deselectRowAtIndexPath:indexPath animated:YES];
//load the clicked cell.
DetailsImageCell *cell = (DetailsImageCell *)[tableView cellForRowAtIndexPath:indexPath];

//init the controller.
AlertsDetailsView *controller = nil;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
    controller = [[AlertsDetailsView alloc] initWithNibName:@"DetailsView_iPad" bundle:nil];
} else {
    controller = [[AlertsDetailsView alloc] initWithNibName:@"DetailsView" bundle:nil];
}

//set the ID and call JSON in the controller.
[controller setID:[cell getID]];

//show the view.
[self.navigationController pushViewController:controller animated:YES];

1 Ответ

6 голосов
/ 14 июня 2011

Вы можете реализовать это в самом методе didSelectRowAtIndexPath:.

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge];
cell.accessoryView = spinner;
[spinner startAnimating];
[spinner release];

В правой части ячейки будет отображаться индикатор активности, который позволит пользователю почувствовать, что что-то загружается.

Редактировать: Если вы установите accessoryView и напишите код загрузки тем же способом, пользовательский интерфейс будет обновляться только после завершения всех операций. Обходной путь для этого - просто установить activityIndicator в методе didSelectRowAtIndexPath: и вызвать код проталкивания контроллера представления с некоторой задержкой.

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

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge];
    cell.accessoryView = spinner;
    [spinner startAnimating];
    [spinner release];

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

- (void)pushDetailView:(UITableView *)tableView {

    // Push the detail view here
}
...