Изменить вид доступа при выборе строки - PullRequest
0 голосов
/ 10 сентября 2011

Я пытаюсь изменить аксессор в ячейке во время загрузки некоторых данных: когда пользователь выбирает ячейку, я загружаю данные из службы JSON, и во время этой загрузки я хочу отобразить счетчик в качестве аксессора.При загрузке следующего вида контроллера отобразится то, что нужно.Я использую этот код, но метод доступа не изменяется (даже если я жду в потоке, прежде чем вернуться из метода):

 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    UIActivityIndicatorView *activityView = 
    [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [activityView startAnimating];
    UIView *oldAccessorView = [cell accessoryView];
    [cell setAccessoryView:activityView];

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject: indexPath] withRowAnimation:UITableViewRowAnimationFade];

 MembersViewController *membersViewController = [[MembersViewController alloc] init];
            membersViewController.title = @"Members";

            // load the members, must be done in a separate thread and must change the cell accessor type to a spinner...
            JSONLoader *loader = [[JSONLoader alloc] init];
            NSString *membersURL = [NSString stringWithFormat:@"%@/members/all.json", jug.apiURL];
            NSMutableArray *members = [loader getMembersFromURL:membersURL];
            membersViewController.members = members;
            [loader release];
            [members release];

            [self.navigationController pushViewController:membersViewController animated:YES];
            [membersViewController release];


 // restore old accessor view
    [NSThread sleepForTimeInterval:5];

    [activityView stopAnimating];    
    [activityView release];
    [cell setAccessoryView:oldAccessorView];

Ответы [ 2 ]

0 голосов
/ 10 сентября 2011

Я согласен с Мэтью по пункту 1: обновление пользовательского интерфейса производится в конце цикла, поэтому вы должны выполнять вызов REST асинхронно.Для пункта 2: учитывая то, что было в дополнительном представлении, вам, возможно, не нужно его сохранять.

0 голосов
/ 10 сентября 2011

Не уверен на 100%, что я ясно понял вопрос.Но может помочь следующее:

1) Из этого кода не ясно, что вы даете iOS возможность обновить дисплей.Это делается только в конце цикла выполнения.Но из того, что я могу разглядеть, весь ваш код выполняется с той же скоростью, что и цикл выполнения.Если этот диагноз верен, то потребуется разумное использование [self performSelector: @selector(method:) withObject: nil afterDelay: 0.0].

Этот вопрос может оказаться полезным. Ответ на другие вопросы иллюстрирует, как развернуть executeSelector: withObject: afterDelay: технику.

2) Если я что-то упустил, вам нужно добавить [oldAccessoryView retain] перед вашим [cell setAccessoryView: activityView] звонок.Затем отпустите его снова после последующего `[cell setAccessoryView: oldAccessoryView] '.Но, возможно, вы сохраняете вспомогательный вид в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...