Ipad UIImagePickerController和UIPopoverController错误

5
我正在使用这段代码打开一个带有图片选择器的弹出框。
-(IBAction)photosAction:(id)sender 
{
// dismiss any left over popovers here
UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
picker.delegate = self; 

UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker];
self.popoverController = popover;          
popoverController.delegate = self;
[popoverController presentPopoverFromBarButtonItem:sender  permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
[picker release];

但这会导致出现错误在某些不是结构体或联合体的东西中请求成员'popoverController''popoverController'未声明(此函数中首次使用)

同时,当选择图像时我想关闭弹出视图。

在下面的函数中,当图像被选中时,应该放置什么代码以关闭弹出视图。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

感谢您的帮助!
3个回答

7
这个错误意味着在视图控制器中未声明popoverController。您需要将其作为一个ivar和property添加到接口中(它不是内置的)。
@interface ... {
     ...
     UIPopoverController *popoverController;
}
@property (nonatomic, retain) UIPopoverController *popoverController;
@end

在实现中,添加@synthesize,在viewDidUnload中将其设置为nil,并在dealloc中释放。
要关闭弹出窗口,您需要调用dismissPopoverAnimated:
[self.popoverController dismissPopoverAnimated:YES];

谢谢,这解决了错误。但是当我点击应该加载弹出窗口的按钮时,在控制台中会出现以下错误。***-[UIRoundedRectButton view]: unrecognized selector sent to instance 0x4d1e140由于未捕获的异常 'NSInvalidArgumentException',原因:'***-[UIRoundedRectButton view]: unrecognized selector sent to instance 0x4d1e140',应用程序终止。 - nishantcm
你为按钮点击设置了什么操作?展示创建按钮的代码。确保addTarget中的选择器以冒号结尾,写成"photosAction:"。如果按钮是在IB中创建的,请检查touch-up-inside的连接。 - user121301
IBOutlet UIButton * selectImageBtn; @property (nonatomic,retain) IBOutlet UIButton * selectImageBtn; @synthesize selectImageBtnIBOutlet UIButton * selectImageBtn; @property (nonatomic,retain) IBOutlet UIButton * selectImageBtn; @synthesize selectImageBtn - nishantcm
现在,当我放置这段代码时它可以工作。UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:picker]; [aPopover setPopoverContentSize:CGSizeMake(320, 320)];[aPopover presentPopoverFromRect:CGRectMake(200,200,-100,-100) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; self.popoverController1 = aPopover; - nishantcm
不太确定保留popoverController是否是一个好主意。我猜popoverController也会保留contentsViewController并在其dealloc中释放它,这将导致它们永远不会释放彼此。 - Martijn Thé

7
这个错误是因为我的函数需要一个“bar button item”,而我使用了普通的“ui button”。

我一直在苦思冥想同一个问题。你能否发一下你的代码?你是改变了UI使用了一个bar button item,还是改变了代码? - Boeckm

0

尝试使用这段代码:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[popover presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 400.0) 
                         inView:self.view
       permittedArrowDirections:UIPopoverArrowDirectionAny 
                       animated:YES];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接