6

UICollectionViewCell のボタンから UIPopoverController を提示しようとしています。

これまでのところ、すべてが正常に作成されていますが、ポップオーバーは表示されません。

これを行う特別な方法はありますか?

コレクションビューセル以外から表示すると、コードは機能します。

次のコードは、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];

ありがとう!

4

2 に答える 2

5

UICollectionViewCell ではなく、UIViewController から PopOver を実行します。したがって、デリゲートを使用して制御します。

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

プロトコルを実装する

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

そしてあなたのためのコード: https://github.com/lequysang/TestPopOver

于 2013-01-21T17:09:18.860 に答える
3

inView を collectionView に変更

[_infoPopover presentPopoverFromRect:_infoButton.frame inView:self.collectionView allowedArrowDirections:UIPopoverArrowDirectionAny アニメーション化:YES];

于 2013-01-23T03:09:45.030 に答える