yon*_*ytu 36 objective-c uiwebview uiimagepickercontroller ios ios8
我发现,在编译iOS 8(并在iOS 8中运行)时,UIWebView
如果在UIWebView
模式中呈现的视图控制器中,则无法显示相机/图像选择器.它在视图控制器中直接从窗口"悬挂" rootViewController
或从其推出的视图控制器中工作没有问题.
测试应用程序可以在https://dl.dropboxusercontent.com/u/6214425/TestModalWebCamera.zip找到,但我将在下面进行描述.
我的测试应用程序(使用故事板构建,但实际应用程序不使用它们)有两个视图控制器(非原始命名ViewController
和ViewController2
).ViewController
包含在UINavigationController
根视图控制器中.ViewController
包含一个UIWebView
(工作正常),一个"显示"("推")的按钮ViewController2
,以及一个UIBarButtonItem
模态呈现的按钮ViewController2
.ViewController2
有另一个UIWebView
在"推"时工作但在"提出"时不工作.
双方ViewController
并ViewController2
装载有:
- (void)viewDidLoad {
[super viewDidLoad];
[self.webView loadHTMLString:@"<input type=\"file\" accept=\"image/*;capture=camera\">" baseURL:nil];
}
Run Code Online (Sandbox Code Playgroud)
当尝试使用模态UIWebView
Xcode在控制台中打印以下内容并解除应用模式:
Warning: Attempt to present <UIImagePickerController: 0x150ab800> on <ViewController2: 0x14623580> whose view is not in the window hierarchy!
Run Code Online (Sandbox Code Playgroud)
我目前的理论是,在改变UIActionSheet
到UIAlertController
有可能产生这种情况,但它是非常难以证明.为了以防万一,我将与Apple一起打开雷达.
有人找到了相同的情况和一些解决方法吗?
see*_*ble 47
我发现在iOS 8.0.2中iPad似乎没有那个bug,但iPhone仍然存在.
但是,在包含uiwebview的视图控制器中覆盖以下内容
-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
Run Code Online (Sandbox Code Playgroud)
并检查有一个presentViewController似乎工作.
但需要检查副作用
#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
Run Code Online (Sandbox Code Playgroud)
我在iOS 9上遇到同样的问题.尝试添加ivar'_flag',然后使用UIWebView在视图控制器中覆盖此方法
#pragma mark - Avoiding iOS bug
- (UIViewController *)presentingViewController {
// Avoiding iOS bug. UIWebView with file input doesn't work in modal view controller
if (_flagged) {
return nil;
} else {
return [super presentingViewController];
}
}
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
// Avoiding iOS bug. UIWebView with file input doesn't work in modal view controller
if ([viewControllerToPresent isKindOfClass:[UIDocumentMenuViewController class]]
||[viewControllerToPresent isKindOfClass:[UIImagePickerController class]]) {
_flagged = YES;
}
[super presentViewController:viewControllerToPresent animated:flag completion:completion];
}
- (void)trueDismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
// Avoiding iOS bug. UIWebView with file input doesn't work in modal view controller
_flagged = NO;
[self dismissViewControllerAnimated:flag completion:completion];
}
Run Code Online (Sandbox Code Playgroud)
这对我很好
归档时间: |
|
查看次数: |
25788 次 |
最近记录: |