UIImagePickerController
在iOS 8中还有其他人遇到问题吗?下面的方法在iPad上的iOS 7中可以很好地工作,但是当我尝试展示选择器(最后一行)时,在XCode 6(Beta 3或4)中运行此方法时,出现以下错误。如果重要的话,sourceType的选择来自在同一位置显示的alertView。
Warning: Attempt to present <UIImagePickerController: 0x7c0ae400> on <CAGUCreateContactViewController: 0x7bf61a00> which is already presenting (null)
打开imagePicker的方法。
- (void)openPhotoPicker:(UIImagePickerControllerSourceType)sourceType
{
if ([UIImagePickerController isSourceTypeAvailable:sourceType]) {
NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:sourceType];
if ([availableMediaTypes containsObject:(NSString *)kUTTypeImage]) {
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen;
imagePickerController.sourceType = sourceType;
imagePickerController.mediaTypes = @[(NSString *)kUTTypeImage];
imagePickerController.delegate = self;
self.imagePickerController = imagePickerController;
if (sourceType == UIImagePickerControllerSourceTypeCamera) {
[self presentViewController:self.imagePickerController animated:YES completion:nil];
} else {
if (self.popoverVC) {
[self.popoverVC dismissPopoverAnimated:YES];
self.popoverVC = nil;
}
self.popoverVC = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
[self.popoverVC presentPopoverFromRect:self.nameAndPicCell.picture.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
}
}
}
我认为这是因为在iOS 8中,警报视图和操作表实际上是显示的视图控制器(UIAlertController
)。因此,如果您要响应的操作而提供一个新的视图控制器,则在关闭时会UIAlertView
被呈现UIAlertController
。UIImagePickerController
通过执行以下操作,我将显示的时间延迟到了运行循环的下一次迭代,从而解决了这一问题:
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self openPhotoPicker:sourceType];
}];
但是,解决此问题的正确方法是UIAlertController
在iOS 8上使用新的API(即使用if ([UIAlertController class])
...进行测试)。如果您还不能使用新的API,这只是一种解决方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句