我想从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];
谢谢!
解决方法
从UIViewController执行PopOver,而不是在UICollectionViewCell中执行.所以,使用委托来控制.
//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]; } }