6

Je cherche à présenter un UIPopoverController à partir d'un bouton sur un UICollectionViewCell.Présentation d'un UIPopoverController depuis UICollectionViewCell

Jusqu'à présent, tout est créé correctement, mais le popover n'est pas visible.

Existe-t-il une façon particulière de le faire?

Le code fonctionne si je l'affiche à partir d'autre chose qu'une cellule de vue de collection.

Le code suivant figure dans la sous-classe UICollectionViewCell.

if (_infoPopover == nil) { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    GameInfoViewController *gameInfoVC = (GameInfoViewController *)[storyboard instantiateViewControllerWithIdentifier:@"GameInfoViewController_ID"]; 

    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:gameInfoVC]; 
    _infoPopover = popover; 
    [gameInfoVC setGameNameString:_gameNameLabel.attributedText]; 
} 

[_infoPopover presentPopoverFromRect:_infoButton.frame inView:self permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

Merci!

+0

S'il vous plaît montrer le code où vous essayez d'afficher le popover. Vous utilisez probablement le mauvais rect. – jrturton

+0

Mis à jour, voir ci-dessus. –

Répondre

5

Exécutez PopOver à partir de UIViewController, pas dans UICollectionViewCell. Donc, utilisez délégué pour contrôler.

//Cell.m 
-(void)popOVerClick:(UIButton *)button{ 
    [[self delegate] didPopOverClickInCell:self]; 
} 

mettre en œuvre le protocole

//ViewController 
    -(void)didPopOverClickInCell:(MyCell *)cell{ 
    if ([self.flipsidePopoverController isPopoverVisible]) { 
     [self.flipsidePopoverController dismissPopoverAnimated:YES]; 
    } else { 

     FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideViewController" bundle:nil]; 
     controller.label.text = cell.title; 
     controller.delegate = self; 

     self.flipsidePopoverController = [[UIPopoverController alloc] initWithContentViewController:controller]; 
     [self.flipsidePopoverController presentPopoverFromRect:cell.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    } 
} 

Et le code pour vous: https://github.com/lequysang/TestPopOver

3

changement inView à CollectionView

[_infoPopover presentPopoverFromRect: _infoButton.frame inView: self.collectionView permittedArrowDirections: UIPopoverArrowDirectionAny animé: OUI];