UIImagePickerController在iPhone和iPad中用法的一点不同[转]

简介:

我们知道,在iPhone中获取照片库常用的方法如下:

 

UIImagePickerController *m_imagePicker = [[UIImagePickerController alloc] init];
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypePhotoLibrary]) {
        m_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        m_imagePicker.delegate = self;
        //        [m_imagePicker.navigationBar.subviews];
        [m_imagePicker setAllowsEditing:NO];
        //m_imagePicker.allowsImageEditing = NO;
        [self presentModalViewController:m_imagePicker animated:YES];
        [m_imagePicker release];
    }else {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Error accessing photo library!" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }

 

这对iPhone的操作是没有问题的。但是当我们在iPad环境中却有问题了,当我们运行时会报如下错误:

 

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be presented via UIPopoverController'

 

所以我们必须通过UIPopoverController来实现才行。具体实现如下:

 

UIImagePickerController *m_imagePicker = [[UIImagePickerController alloc] init];
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypePhotoLibrary]) {
        m_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        m_imagePicker.delegate = self;
        [m_imagePicker setAllowsEditing:NO];
        UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:m_imagePicker];
        self.popoverController = popover;
        //popoverController.delegate = self;
        
        [popoverController presentPopoverFromRect:CGRectMake(0, 0, 300, 300) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        
        //[self presentModalViewController:m_imagePicker animated:YES];
        [popover release];
        [m_imagePicker release];
    }else {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Error accessing photo library!" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
这里需要注意,对局部UIPopoverController对象popover我们赋给了一个全局的UIPopoverController对象popoverController。而不能直接调用popover。因为在popover对象还可见时,是不能够被释放的。

 

from:http://blog.csdn.net/fxj281314/article/details/6050588 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!




















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/archive/2012/05/30/2526622.html ,如需转载请自行联系原作者


相关文章
|
16天前
|
移动开发 网络协议 Linux
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
22 0
|
16天前
|
关系型数据库 MySQL iOS开发
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
19 0
|
Web App开发 网络虚拟化 iOS开发
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
|
iOS开发
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解
|
iOS开发
苹果怎么查看 UDID iPhone/iPad 查看 UDID 教程【详解】
在开发 iPhone 和 iPad 软件的时候,要使用 UDID 来做真机测试,那么如何查看 iPhone 或者 iPad 的 UDID 呢?下面介绍三种最简单的查看 UDID 的方法,供大家参考!下面就详情来看看。
|
存储 算法 C++
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
|
iOS开发
iPhone和ipad去掉按钮默认样式
1.手机端web开发,遇到一下问题: 按钮应该是红色的背景,结果上面有一层白色的蒙层。 去掉所有自定义样式发现:白色的蒙层是button自带的样式,在iPhone和ipad上面没有去掉
79 0
|
编解码 iOS开发
iphone 开发的基本入门知识
iphone 开发的基本入门知识
158 0
「镁客早报」iPhone或将在今年采用三摄;传Facebook致力于开发语音助力服务与亚马逊、苹果竞争
亚马逊向美国Alexa设备推免费音乐服务;视频会议软件开发商Zoom纳斯达克上市。
232 0
|
Web App开发 缓存 开发工具