您的位置:首页 > 产品设计 > UI/UE

On iPad, UIImagePickerController must be presented via UIPopoverController

2013-08-28 19:14 274 查看
本文转载至: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中获取照片库常用的方法如下: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对象还可见时,是不能够被释放的。小结:iPad与iphone调用UIImagePickerViewController方法略有不同的内容介绍完了,希望本文对你有所帮助!
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: