• On iPad, UIImagePickerController must be presented via UIPopoverController


    本文转载至: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];}
    
    

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

    我们知道,在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.            
    11.         [popoverController presentPopoverFromRect:CGRectMake(0, 0, 300, 300) inView:self.
    12. view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];  
    13.            
    14.         //[self presentModalViewController:m_imagePicker animated:YES];  
    15.         [popover release];  
    16.         [m_imagePicker release];  
    17.     }else {  
    18.         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"Error accessing photo library!" 
    19. delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil];  
    20.         [alert show];  
    21.         [alert release];  
    22.     } 

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

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

  • 相关阅读:
    如何向线程传递参数
    IntelliJ IDEA 13 Keygen
    单链表的基本操作
    顺序表静态查找
    有向图的十字链表表存储表示
    BF-KMP 算法
    图的邻接表存储表示(C)
    二叉树的基本操作(C)
    VC远控(三)磁盘显示
    Android 数独游戏 记录
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/3287816.html
Copyright © 2020-2023  润新知