#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. Это гарантирует, что контроллер представления содержимого сможет отклонить всплывающее окно в ответ на соответствующие действия пользователя.
Ответ №4:
в didSelectRowAtIndexPath попробуйте этот код
[viewController.popoverController dismissPopoverAnimated:YES];