所以我正在编写这个从主屏幕开始的iPad应用程序,然后从那里你可以进入设置页面。在设置页面中,您可以使用弹出视图中的UIImagePickerController
从相册中选择图片。
如果我转到设置页面,然后按后退按钮返回主页,一切都按预期工作。但如果我去设置并选择图像,页面上的后退按钮将不允许我返回主页面。
popover和UIImagePickerController
似乎工作正常,所以我不知道是什么导致了这一点。这是UIImagePickerController
的代码。
- (IBAction)imagePick1:(id)sender {
pickerController = [[UIImagePickerController alloc] init];
[pickerController setDelegate:self];
[pickerController setSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
[pickerController setAllowsEditing:NO];
popoverController = [[UIPopoverController alloc] initWithContentViewController:pickerController];
[popoverController setDelegate:self];
[popoverController presentPopoverFromRect:[[self imageButton1] frame] inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
...
- (void)imagePickerController:(UIImagePickerController *)pickerController1 didFinishPickingMediaWithInfo:(NSDictionary *)info
{
image1 = [info objectForKey:UIImagePickerControllerOriginalImage];
_image1.image = image1;
[popoverController dismissPopoverAnimated:YES];
}
当我尝试按后退按钮时,应用程序会冻结,并且不会再响应任何其他命令。我做错了什么?
编辑:我再次运行它,这是我按下后退按钮时在日志中出现的错误。
-[__NSCFType dismissPopoverAnimated:]: unrecognized selector sent to instance 0x7128cd0
此处是我头文件的开头。
@interface ViewController : UIViewController
<UIPickerViewDataSource, UIPickerViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate>{
UIPopoverController *popoverController;
}
@property (nonatomic, retain) UIPopoverController *popoverController;
答案 0 :(得分:0)
可能重复。见here
您是否已在头文件中声明了委托,如下所示?还请确保您的代理也符合UINavigationControllerDelegate,因为UIImagePickerControllerDelegate直接继承自UINavigationControllerDelegate,但是所有UINavigationControllerDelegate方法都是可选的。
@interface MyViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
编辑:根据您的编辑,您似乎还需要将“UIPopoverControllerDelegate”添加到头文件中。您还需要在分配后添加[popoverController setDelegate:self]
。
编辑2:好了,现在你需要在你的实现(.m)文件中声明这个方法。
并返回是。
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController {
return YES;
}
编辑3:为什么你将dismissPopoverAnimated设置为NO并在它仍然显示时释放popoverController?
[popoverController dismissPopoverAnimated:NO];
[popoverController release];
尝试将dismissPopoverAnimated设置为YES并暂时删除该版本。顺便说一句,popoverController是否保留为头文件中的属性?你在用ARC吗?如果你使用ARC,你不应该在popoverController上调用release。
编辑4:
尝试将标题修改为:
UIPopoverController *_popoverController;
@property (nonatomic, retain) UIPopoverController *popoverController
并将@synthesize popoverController = _popoverController;
添加到您的实施文件中。
现在开始用实现文件中的“_popoverController”替换“popoverController”的所有实例。
同时用{/ p>替换[popoverController dismissPopoverAnimated:YES];
if(_popoverController != nil)
[_popoverController dismissPopoverAnimated:YES];
让我知道下面的结果。