本文转载至:http://blog.csdn.net/k12104/article/details/8537695

On iPad, UIImagePickerController must be presented via UIPopoverController  可以用以下方法来判断设备的类型选择不同的Controller
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone){// We are using an iPhoneUIActionSheet*alertSheet =[[UIActionSheet alloc] initWithTitle:@"Where do you want to get your daily image?" delegate:(self) cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Camera",@"Library", nil];[alertSheet setTag:0];[alertSheet setDelegate:self];[alertSheet showFromTabBar:[[self tabBarController] tabBar]];[alertSheet release];}else{// We are using an iPadUIImagePickerController*imagePickerController =[[UIImagePickerController alloc] init];
imagePickerController.delegate = self;UIPopoverController*popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePickerController];
popoverController.delegate=self;[popoverController presentPopoverFromRect:((UIButton*)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];}

iPad与iPhone调用UIImagePickerViewController方法略有不同是本文要介绍的内容,文中很详细的讲述了iPad与iphone各自的调用方法,来看详细内容。

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

  1. UIImagePickerController *m_imagePicker = [[UIImagePickerController alloc] init];
  2. if ([UIImagePickerController isSourceTypeAvailable:
  3. UIImagePickerControllerSourceTypePhotoLibrary]) {
  4. m_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  5. m_imagePicker.delegate = self;
  6. //        [m_imagePicker.navigationBar.subviews];
  7. [m_imagePicker setAllowsEditing:NO];
  8. //m_imagePicker.allowsImageEditing = NO;
  9. [self presentModalViewController:m_imagePicker animated:YES];
  10. [m_imagePicker release];
  11. }else {
  12. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:
  13. @"Error accessing photo library!" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil];
  14. [alert show];
  15. [alert release];
  16. }

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

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

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

  1. UIImagePickerController *m_imagePicker = [[UIImagePickerController alloc] init];
  2. if ([UIImagePickerController isSourceTypeAvailable:
  3. UIImagePickerControllerSourceTypePhotoLibrary]) {
  4. m_imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  5. m_imagePicker.delegate = self;
  6. [m_imagePicker setAllowsEditing:NO];
  7. UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:m_imagePicker];
  8. self.popoverController = popover;
  9. //popoverController.delegate = self;
  10. [popoverController presentPopoverFromRect:CGRectMake(0, 0, 300, 300) inView:self.
  11. view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
  12. //[self presentModalViewController:m_imagePicker animated:YES];
  13. [popover release];
  14. [m_imagePicker release];
  15. }else {
  16. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Error accessing photo library!"
  17. delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil];
  18. [alert show];
  19. [alert release];
  20. }

这里需要注意,对局部UIPopoverController对象popover我们赋给了一个全局的UIPopoverController对象popoverController。而不能直接调用popover。因为在popover对象还可见时,是不能够被释放的。

小结:iPad与iphone调用UIImagePickerViewController方法略有不同的内容介绍完了,希望本文对你有所帮助!

On iPad, UIImagePickerController must be presented via UIPopoverController的更多相关文章

  1. iOS:iPad和iPhone开发的异同(UIPopoverController、UISplitViewController)

    iPad和iPhone开发的异同 1.iPhone和iPad: niPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率 UI元素的排布 \ ...

  2. IOS成长之路-调用照相机和相册功能

    打开相机: //先设定sourceType为相机,然后判断相机是否可用(ipod)没相机,不可用将sourceType设定为相片库 UIImagePickerControllerSourceType ...

  3. iPad 控件 UIPopoverPresentationController 使用 iPhone可用

    UIPopoverController 在iOS9之后被废弃了,,, iOS8 新控件UIPopoverPresentationController可运用在iphone和iPad上,使用基本同 UIP ...

  4. BlocksKit的使用

    一.引言 众所周知Block已被广泛用于iOS编程.它们通常被用作可并发执行的逻辑单元的封装,或者作为事件触发的回调.Block比传统回调函数有2点优势: 允许在调用点上下文书写执行逻辑,不用分离函数 ...

  5. IOS 在Ipad 横屏 上使用UIImagePickerController

    转载前请注明来源:http://www.cnblogs.com/niit-soft-518/p/4381328.html 最近在写一个ipad的项目,该项目必须是横屏.进入正题,有一项功能是要调用系统 ...

  6. iPad 控件UIPopoverController使用

    UIPopoverController 是iPad特有控件,(iOS7-9),在iOS9之后别废弃 使用步骤 设置内容控制器 UIPopoverController直接继承NSObject,不具备可视 ...

  7. iOS iPad开发之UIPopoverController的使用

    1. 什么是UIPopoverController? 是iPad开发中常见的一种控制器(在iphone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewCon ...

  8. iOS8 iPad Warning: Attempt to present <UIImagePickerController:xxxx > on xxxx which is already presenting (null)

    解决方法: /* I think this is because in iOS 8, alert views and action sheets are actually presented view ...

  9. iPad开发中UIPopoverController的使用

    什么是UIPopoverController 是iPad开发中常见的一种控制器 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来 ...

随机推荐

  1. ios开发之修改 UITableview 滚动条颜色的方法

    UITableview 的滚动条默认颜色是黑色的,如果 UItableview 背景也是深颜色,则滚动条会变的很不明显.您可以用下面这行代码来改变滚动条的颜色 self.tableView.indic ...

  2. mysql 加入远程用户

    USE mysql; GRANT ALL PRIVILEGES ON *.* TO panjing @"%" IDENTIFIED BY "123456"; F ...

  3. iOS边练边学--自定义非等高的cell

    一.使用xib或者storyboard自定义非等高的cell实现方式差不多,这里简单介绍一下通过xib文件实现的方法 <1.1>创建一个继承自UITableViewCell的子类,比如Ch ...

  4. KBEngine 服务器端-loginapp-协议构建、解析执行详细介绍

    宏宏宏 由于 C++ 是静态语言,不能像 js 一样通过函数名字符串来直接执行函数,所以将 messageId 映射到可执行函数的复杂性大大提升:KBEngine 使用了一系列精巧的「宏」来解决这个问 ...

  5. PHP打印重复的东西

    <?php echo str_repeat(" ", 8)?>//连续打印8个空格

  6. python将数据写入mysql乱码的解决办法

    1.错误为:插入乱码 报错: Python模块MySQLdb操作mysql出现2019错误:Can't initialize character set utf-8 解决: 写入数据语句为: cnn ...

  7. 普通windows版本安装winServer的特色功能 以dedup功能为展示点

    安装 Windows 功能角色 1.选择安装源 在 Windows 8.1 系统上不存在重复数据删除功能,需要从对应的服务器版本,即 Windows Server 2012 R2 上提取相关文件. 2 ...

  8. 《FPGA全程进阶---实战演练》第二章之PCB layout注意事项以及投板几点说明

           上一篇博客讲述了各个部分的原理图,那么根据原理图画出PCB,其实PCB是一门很大的学问,想要掌握谈何容易.就笔者在画PCB时的一些注意事项做一些说明.        1.电源部分的电源线 ...

  9. Blend for Visual Studio 2013

    软件开发中为了使设计师和程序员“并行”工作并直接参与到程序的开发中来. 1.在网络程序开发团队中,草图设计后,设计师们可以使用HTML.CSS.JavaScript直接生成UI,程序员则在这个UI产生 ...

  10. 转载:【原译】Erlang构建和匹配二进制数据(Efficiency Guide)

    转自:http://www.cnblogs.com/futuredo/archive/2012/10/19/2727204.html Constructing and matching binarie ...