В моем контроллере Popover у меня есть табличное представление. При выборе ячейки я хочу скрыть всплывающее окно. Как я могу это достичь.
UIPopOverController + UITableView - скрыть popover при выборе ячейки
Ответ 1
В заголовке файла контроллера Root view:
@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];
}
В представлении таблицы добавьте делегат и реализуйте делегат в контроллере корневого представления. Когда вызывается метод делегата, используйте вышеприведенный код, чтобы отклонить всплывающее окно.
Ответ 2
Позвольте мне предложить немного другое решение, которое заключается в передаче ссылки контроллера popover вместо ссылки segue.
В файле реализации контроллера представления исходного кода:
-(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;
Тот же файл, когда вы хотите отклонить popover:
[popoverController dismissPopoverAnimated:YES];
Ответ 3
Яблочные документы рекомендуют следующее:
Отклонение popover программно требует указателя на контроллер popover. Единственный способ получить такой указатель - сохранить его самостоятельно, как правило, в контроллере представления контента. Это гарантирует, что контроллер представления контента может отклонить popover в ответ на соответствующие действия пользователя.
Ответ 4
in didSelectRowAtIndexPath попробуйте этот код
[viewController.popoverController dismissPopoverAnimated:YES];