使用UIDocumentInteractionController后为什么CustomIOS7AlertView没有显示?

时间:2016-01-19 09:25:13

标签: ios

我正在iOS中开发WIFI IP Camera。 APP可以通过WiFi连接到WIFI IP摄像头。

我可以在IP Camera上获取所有文件列表,也可以从WIFI IP Camera下载文件。

所以我有两个文件列表。一个是WIFI IP Camera上的文件列表,另一个是从WIFI IP Camera下载的文件列表。

我使用 CustomIOS7AlertView 通过WIFI 查看WIFI IP摄像机上的文件,如下面的代码。

    UIImage *urlImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:url]];

    UIView *demoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 290, 200)];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 270, 180)];

    [imageView setImage:urlImage];
    [imageView setContentMode:UIViewContentModeScaleAspectFit];
    [demoView addSubview:imageView];

     // Here we need to pass a full frame
    CustomIOS7AlertView *alertView = [[CustomIOS7AlertView alloc] init];

    // Add some custom content to the alert view
    [alertView setContainerView:demoView];

    // Modify the parameters
    [alertView setButtonTitles:[NSMutableArray arrayWithObjects:@"OK", nil]];

    [alertView setDelegate:self];

    // You may use a Block, rather than a delegate.
    [alertView setOnButtonTouchUpInside:^(CustomIOS7AlertView *alertView, int buttonIndex) {

         for(NSIndexPath *indexPath in self.collectionView.indexPathsForSelectedItems){
              [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
         }

                                    [alertView close];
}];

    [alertView setUseMotionEffects:true];

使用以下代码查看从WIFI IP Camera下载的本地文件

url = [NSURL fileURLWithPath: filePath] ;
documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];
[documentInteractionController setDelegate:self];

[documentInteractionController presentPreviewAnimated:YES] ;

第一次在WIFI网络摄像机上查看文件时, CustomIOS7AlertView 工作正常。

CustomIOS7AlertView 在我通过UIDocumentInteractionController查看本地文件后,想要查看WIFI IP Camera上的文件时没有显示。

使用CustomIOS7AlertView后似乎隐藏了 UIDocumentInteractionController

我错过了什么吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为UIDocumentInteractionController可能会在您使用window之后留下我们不需要的额外UIDocumentInteractionController,当您再次致电CustomIOS7AlertView时,可能会将其添加到错误的窗口,我们无法看到AlertView。

这是我的解决方案:
在添加到窗口之前,请确保 showsViewMethod 中的CustomIOS7AlertView具有最顶层的窗口检查,如下所示:

NSEnumerator *frontToBackWindows = [UIApplication.sharedApplication.windows reverseObjectEnumerator];

for (UIWindow *window in frontToBackWindows){
    BOOL windowOnMainScreen = window.screen == UIScreen.mainScreen;
    BOOL windowIsVisible = !window.hidden && window.alpha > 0;
    BOOL windowLevelNormal = window.windowLevel == UIWindowLevelNormal;

    if (windowOnMainScreen && windowIsVisible && windowLevelNormal) {
        if(!self.superview){
            //assume self is CustomIOS7AlertView or it's subView will be added to window
            [window addSubview:self];
        }
        break;
    }
}

希望这对你有帮助!