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

У меня есть контроллер Navigaton, отображающий TableView и панель инструментов с кнопкой. Если пользователь нажимает кнопку, отображается модальный вид с несколькими кнопками. При нажатии одной из этих кнопок загружается новый набор данных и перезагружается tableView.

При определенных условиях, когда новый набор данных перезагружается, мне нужно показать модальное представление, чтобы предупредить пользователя о некоторой ситуации.

Это код, который я изначально пишу, чтобы показать пользователю предупреждение:

- (void) selectEventosListMVCButtonPressed:(NSInteger)button    
{
    switch (button) {        
    .
    .
    .
    .
    case 3:
        // eventos favoritos

        // Load Favourites Events
        // This is the new data to load
        if (!self.eventosFavourites) {
            [self loadEventos:kURLEventosCopyFavourites];
        }
        // Empty the container
        [self.eventosListsContainer removeAllObjects];
        // Load Favourites Eventos
        [self.eventosListsContainer addObject:self.eventosFavourites];
        // Reload the view
        [self.tableView reloadData];

        // Load Expired Events
        // If there are some eventosExpired then show alert to user
        if (!self.eventosExpired) {
            [self loadEventos:kURLEventosCopyExpired];
        }
        if (self.eventosExpired) {
            // There are expired eventes
            // Load a modal view to inform the user
            ExpiredEventosMVC *expiredView = [[ExpiredEventosMVC alloc] initWithNibName:@"ExpiredEventosMVC" bundle:0];
            expiredView.delegate = self;
            expiredView.eventos = self.eventosExpired;
            [self presentModalViewController:expiredView animated:YES];
            [expiredView release];
        }
        break;
}
[self.modalViewController dismissModalViewControllerAnimated:YES];
[self.modalViewController release];
}

Но модальное представление никогда не показывается. Чтобы это работало, я должен подождать, пока пользователю будет показано модальное представление ExpiredEventosMVC. Нажмите кнопку ОК в этом представлении, чтобы закрыть его и продолжить выполнение, но как я могу это сделать?

1 Ответ

1 голос
/ 14 октября 2011

Вы представляете модальный контроллер с этой строкой кода:

[self presentModalViewController:expiredView animated:YES];

И затем сразу же отклоняете его двумя строками:

[self.modalViewController dismissModalViewControllerAnimated:YES];

Ваш код должен отклонить контроллер после пользователь нажал одну из своих кнопок, а не до.Для этого настройте кнопки для отправки сообщений о действиях на ваш контроллер и позвоните оттуда dismissModalViewControllerAnimated:.

Кстати, присвоение имени переменной, в которой вы храните контроллер вида expiredView, скорее всегопривести в замешательство.Рассмотрим expiredController, expiredViewController или expiredVC.(Но не expiredMVC - это тоже не очень хорошая идея. MVC - это сокращение от Model-View-Controller - шаблон проектирования, а не класс.)

...