我有一个拆分视图,包含主表视图和详细视图。在我的分割视图主视图的导航栏上,我有一个按钮,可以让用户通过imagePicker拍照。但是当我按下按钮时,我的程序会一直崩溃。这是按下按钮时调用的MasterViewController.m的过程:
-(void) takePicture:(id) sender
{
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
}
else
{
[imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
[imagePicker setDelegate:self];
//[self presentViewController:imagePicker animated:YES completion:nil];
if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
UIPopoverController * popOverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[popOverController presentPopoverFromRect:((UIButton *)sender).frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
//[popOverController presentPopoverFromRect:CGRectMake(700, 1000, 10, 10) inView:self.detailViewController.imageSpace permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}else {
[self presentViewController:imagePicker animated:YES completion:nil];
}
}
这是错误信息:
2013-02-11 09:06:43.975 ImageSplit2[13044:c07] -[UIBarButtonItem frame]: unrecognized selector sent to instance 0x7183d00
2013-02-11 09:06:43.976 ImageSplit2[13044:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIBarButtonItem frame]: unrecognized selector sent to instance 0x7183d00'
答案 0 :(得分:0)
sender
不是UIButton
,而是UIBarButtonItem
,它不是视图,因此没有frame
属性。
改变这个:
[popOverController presentPopoverFromRect:((UIButton *)sender).frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
为:
[popOverController presentPopoverFromBarButtonItem:(UIBarButtonItem *)sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
附注:如果从照片库中选择图像,则必须在iPad上使用弹窗框。然而,将基于相机的图像选择器呈现为全屏视图控制器是完全有效的。因此,您可能希望更改if
声明:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
为:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && imagePicker.sourceType != UIImagePickerControllerSourceTypeCamera)