繁体   English   中英

关闭UIPopoverController后呈现视图控制器

[英]Presenting a View Controller after a UIPopoverController is dismissed

我在解散UIPopoverController之后立即呈现全屏视图控制器(特别是MPMoviePlayerViewController )时遇到了一些困难。 本质上,我有比赛条件,而且不确定是否有公认的最佳做法来纠正它。 这是我开始的代码:

   [[self searchPopoverController] dismissPopoverAnimated:YES];

   MPMoviePlayerViewController *player = [[MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:[video videoURL]];
   [[player moviePlayer] setFullscreen:YES animated:YES];
   [self presentMoviePlayerViewControllerAnimated:player];

问题在于,在执行下一行代码之前,弹出窗口实际上并没有消除,从而(按预期)导致“在演示过程中尝试呈现[视图控制器]”警告。 有点幽默,视频确实开始播放(您可以听到音频),但是未显示视图控制器,因此您无法观看视频。

我已尝试通过几种方式解决此问题。 我发现的唯一可靠的解决方案是丑陋的,而不是可以保证的解决方案:

   [[self searchPopoverController] dismissPopoverAnimated:YES];

   dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
   dispatch_after(start, dispatch_get_main_queue(), ^(void){
      MPMoviePlayerViewController *player = [[MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:[video videoURL]];
      [[player moviePlayer] setFullscreen:YES animated:YES];
      [self presentMoviePlayerViewControllerAnimated:player];
   });

由于UIPopoverController不能从UIViewController继承,因此我不认为有任何方法可以消除包含完成处理块的弹出窗口。 我尝试使用NSInvocationOperationNSOperationQueue ,但是没有成功,例如:

   NSInvocationOperation *invokedOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(playVideo:) object:video];
   [[NSOperationQueue mainQueue] addOperation:invokedOperation];

有很多有关此问题的现有问题,但大多数问题似乎都围绕着解散UIViewController或子类,而dismissViewControllerAnimated:completion:是一个显而易见的解决方案。

您应该使用popoverControllerDidDismissPopover委托方法popoverControllerDidDismissPopover

一旦弹出窗口被完全消除,这将通知您。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPopoverControllerDelegate_protocol/index.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverControllerDidDismissPopover

为什么不实现UIPopoverControllerDelegate协议并将您的控制器添加为委托,那么您可以将第二个viewController从

-(void)popoverControllerDidDismissPopover:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM