6

Ich bin auf der Suche nach einem UIPopoverController von einer Schaltfläche auf einem UICollectionViewCell.Präsentieren eines UIPopoverController von UICollectionViewCell

Bis jetzt ist alles in Ordnung, aber das Popover ist nicht sichtbar.

Gibt es eine spezielle Möglichkeit, dies zu tun?

Der Code funktioniert, wenn ich es aus etwas anderem als einer Collection-View-Zelle anzeigen.

Der folgende Code befindet sich in der UICollectionViewCell-Unterklasse.

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]; 

Vielen Dank!

+0

Bitte zeigen Sie den Code, wo Sie versuchen, das Popover anzuzeigen. Sie benutzen wahrscheinlich das falsche Rect. – jrturton

+0

Aktualisiert, siehe oben. –

Antwort

5

Führen Sie PopOver von UIViewController aus, nicht in UICollectionViewCell. Verwenden Sie also delegate zur Steuerung.

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

Protokoll für Sie

//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]; 
    } 
} 

und der Code implementieren: https://github.com/lequysang/TestPopOver

3

Änderung INview zu Kollektion

[_infoPopover presentPopoverFromRect: _infoButton.frame INview: self.collectionView permittedArrowDirections: UIPopoverArrowDirectionAny animiert: JA];