UIPopOverController + UITableView - скрыть всплывающее окно при выделении ячейки - PullRequest
10 голосов
/ 28 октября 2011

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

Ответы [ 4 ]

9 голосов
/ 22 декабря 2011

Позвольте мне предложить немного другое решение, заключающееся в передаче ссылки на контроллер поповера вместо ссылки на 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;

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

[popoverController dismissPopoverAnimated:YES];
9 голосов
/ 29 октября 2011

В заголовочном файле контроллера 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];        
    }

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

1 голос
/ 30 ноября 2012

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

[viewController.popoverController dismissPopoverAnimated:YES];
1 голос
/ 18 апреля 2012

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

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

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

...