UIPopoverController UITableView — скрыть всплывающее окно при выборе ячейки

#ios #uitableview #uipopovercontroller

#iOS #uitableview #uipopovercontroller

Вопрос:

В моем контроллере всплывающего окна у меня есть табличное представление. При выборе ячейки я хочу скрыть всплывающее окно. Как я могу этого добиться.

Ответ №1:

В заголовочном файле контроллера корневого представления:

 @property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue;
 

В файле реализации:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if( [[segue identifier] isEqualToString:@"popover"] )
    {
        NSLog(@"%@",[segue destinationViewController]);
        self.popSegue = (UIStoryboardPopoverSegue*)segue;

        [[segue destinationViewController] setDelegate:self];
    }
}
 

Когда вы захотите скрыть всплывающее окно:

     if ([self.popSegue.popoverController isPopoverVisible]) 
    {
        [self.popSegue.popoverController dismissPopoverAnimated:YES];        
    }
 

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

Комментарии:

1. Молодец, что решил эту головоломку.

Ответ №2:

Позвольте мне предложить несколько иное решение, которое заключается в передаче ссылки на контроллер всплывающего окна вместо ссылки на переход.

В файле реализации исходного контроллера представления:

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue destinationViewController] isKindOfClass:[MyDestViewController class]]) {
        MyDestViewController* viewController = (MyDestViewController*)[segue destinationViewController];
        UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue;
        [viewController setPopoverController:[popoverSegue popoverController]];
    }
}
 

В заголовочном файле контроллера представления назначения:

 @property (weak, nonatomic) UIPopoverController* popoverController;
 

В файле реализации контроллера представления назначения:

 @synthesize popoverController;
 

Тот же файл, всякий раз, когда вы хотите отклонить всплывающее окно:

 [popoverController dismissPopoverAnimated:YES];
 

Ответ №3:

Документы Apple рекомендуют следующее:

Для отклонения всплывающего окна программно требуется указатель на контроллер всплывающего окна. Единственный способ получить такой указатель — сохранить его самостоятельно, обычно в content view controller. Это гарантирует, что контроллер представления содержимого сможет отклонить всплывающее окно в ответ на соответствующие действия пользователя.

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/Popovers.html

Ответ №4:

в didSelectRowAtIndexPath попробуйте этот код

 [viewController.popoverController dismissPopoverAnimated:YES];