在我的应用程序中,我使用了UIActionSheet和UIImagePickerController。操作表打开选项(选择照片,选择视频)和图像选择器控制器打开库。这个系统适用于iPhone设备测试,但对于iPad,Action Sheet工作正常而Picker Controller没有。
我为iOS10设置了相机和照片库所需的权限。这不是问题。
我选择照片的代码:
- (void)selectPhoto {
self.imagePickerController.delegate = self;
self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
self.imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
[self presentViewController:self.imagePickerController animated:YES completion:nil];
}
编写了必需的委托方法。正如我所提到的,每个人都应该在iPhone中工作。
当我首先尝试打开照片库时,我收到以下警告信息:
[警告]< _UIPopoverBackgroundVisualEffectView 0x147c5ad0>正在 要求动画不透明度。这将导致效果出现 破坏,直到不透明度返回到1。
没有任何东西被破坏,应用程序仍在运行(不冻结)。但是,如果我尝试打开照片库,这次我得到:
警告:尝试出现 已经呈现(null)
然后,问题可能是popover问题,但我找不到答案。 谢谢!
编辑:我的操作表委托方法:
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
[actionSheet dismissWithClickedButtonIndex:buttonIndex animated:YES];
switch (buttonIndex) {
case 0:
[self selectPhoto];
break;
case 1:
[self selectVideo];
break;
default:
break;
}
}
编辑2 :我找到了that:
在iPad上,您必须使用弹出窗口显示浏览器界面 在initWithContentViewController中描述:和呈现和 在UIPopoverController类参考中解除Popover。如果,开 iPad,您尝试以模态方式呈现浏览器界面 (全屏),系统引发异常。
UIPopoverController现已弃用。因此我应该用另一种方式。如果有人能帮助我,我会很高兴。
答案 0 :(得分:1)
对于iPad,请使用代码打开UIImagePicker
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self presentViewController:picker animated:NO completion:nil];
}];
答案 1 :(得分:0)
您可以在Info.plist文件中指定所有Cocoa密钥的列表:
iOS早先已经需要访问麦克风,相机和媒体库的权限(iOS6,iOS7),但是从iOS10开始,如果你不提供描述为什么要求获得许可,应用程序就会崩溃。
答案 2 :(得分:0)
在iPad上,您无法通过屏幕上的UIActionSheet popover显示UIImagePickerController popover。
替换
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
与
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex;
它必须有效。
并删除[actionSheet dismissWithClickedButtonIndex:buttonIndex animated:YES];
,点击按钮后,UIActionSheet
会自动被解除。
答案 3 :(得分:0)
要在iPhone和iPad上显示图像选择器,您需要将其显示为弹出窗口。
因此,显示您的选择器的实现将更改为
self.imagePickerController.delegate = self;
self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
self.imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
self.imagePickerController.modalPresentationStyle = UIModalPresentationPopover; //This is needed
self.imagePickerController.sourceView = self.view; //This is needed
[self presentViewController:self.imagePickerController animated:YES completion:nil];
在出示选择器之前,请确保您的操作表已被解除。