xcode – 从UICollectionViewCell呈现UIPopoverController

前端之家收集整理的这篇文章主要介绍了xcode – 从UICollectionViewCell呈现UIPopoverController前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从UICollectionViewCell上的按钮呈现UIPopoverController.

到目前为止,一切都已创建好,但弹出窗口不可见.

这有什么特别的方法吗?

如果我从集合视图单元格以外的任何其他位置显示代码,则代码可以工作.

以下代码位于UICollectionViewCell子类中.

  1. if (_infoPopover == nil) {
  2. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
  3. GameInfoViewController *gameInfoVC = (GameInfoViewController *)[storyboard instantiateViewControllerWithIdentifier:@"GameInfoViewController_ID"];
  4.  
  5. UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:gameInfoVC];
  6. _infoPopover = popover;
  7. [gameInfoVC setGameNameString:_gameNameLabel.attributedText];
  8. }
  9.  
  10. [_infoPopover presentPopoverFromRect:_infoButton.frame inView:self permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

谢谢!

解决方法

从UIViewController执行PopOver,而不是在UICollectionViewCell中执行.所以,使用委托来控制.
  1. //Cell.m
  2. -(void)popOVerClick:(UIButton *)button{
  3. [[self delegate] didPopOverClickInCell:self];
  4. }

实施协议

  1. //ViewController
  2. -(void)didPopOverClickInCell:(MyCell *)cell{
  3. if ([self.flipsidePopoverController isPopoverVisible]) {
  4. [self.flipsidePopoverController dismissPopoverAnimated:YES];
  5. } else {
  6.  
  7. FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideViewController" bundle:nil];
  8. controller.label.text = cell.title;
  9. controller.delegate = self;
  10.  
  11. self.flipsidePopoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
  12. [self.flipsidePopoverController presentPopoverFromRect:cell.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
  13. }
  14. }

和你的代码https://github.com/lequysang/TestPopOver

猜你在找的iOS相关文章