我发现,在针对 iOS 8 进行编译(并在 iOS 8 中运行)时,UIWebView
无法显示相机/图像选择器,如果UIWebView
位于以模态方式呈现的视图控制器中。它在直接“悬挂”在窗口上的视图控制器中工作没有问题rootViewController
或从它推送的视图控制器。
测试应用程序可以在以下位置找到:https://dl.dropboxusercontent.com/u/6214425/TestModalWebCamera.zip但我会在下面描述它。
我的测试应用程序(使用故事板构建,但实际应用程序不使用它们)有两个视图控制器(最初命名为ViewController
and ViewController2
). ViewController
包含在一个UINavigationController
这是根视图控制器。ViewController
包含一个UIWebView
(工作开启),一个“显示”(“推动”)的按钮ViewController2
, and a UIBarButtonItem
它模态地呈现ViewController2
. ViewController2
还有另一个UIWebView
它在“推动”时有效,但在“呈现”时无效。
Both ViewController
and ViewController2
装载有:
- (void)viewDidLoad {
[super viewDidLoad];
[self.webView loadHTMLString:@"<input type=\"file\" accept=\"image/*;capture=camera\">" baseURL:nil];
}
当尝试使用模态时UIWebView
Xcode 在控制台中打印以下内容并关闭应用程序模式:
Warning: Attempt to present <UIImagePickerController: 0x150ab800> on <ViewController2: 0x14623580> whose view is not in the window hierarchy!
我目前的理论是,变化UIActionSheet
to UIAlertController
可能会造成这种情况,但很难证明。我会用苹果打开一个雷达,以防万一。
有人发现同样的情况和一些解决方法吗?
我发现在iOS 8.0.2中iPad似乎没有这个bug,但iPhone仍然有。
但是,在包含 uiwebview 的视图控制器中重写以下内容
-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
检查是否有presentedViewController 似乎可以工作。
但需要检查副作用
#import "UiWebViewVC.h"
@interface UiWebViewVC ()
@property (weak, nonatomic) IBOutlet UIWebView *uiwebview;
@end
@implementation UiWebViewVC
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://html5demos.com/file-api-simple"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
self.uiwebview.scalesPageToFit = YES;
[self.uiwebview loadRequest:request];
}
-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
{
if ( self.presentedViewController)
{
[super dismissViewControllerAnimated:flag completion:completion];
}
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)