我想从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];
- }
- }