1

这是我的视图的设置:

查看设置

UIBarButtonItem点击 时,它应该会弹出一个UIImagePickerController. 我必须使用 a 来执行此操作UIPopoverController,通过单击“重置”按钮调用它,因为它在 iPad 上是必需的。这是我的代码:

-(IBAction) btnReset:(id)sender {
    [self chooseImage];
}

-(void) chooseImage {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        imagepicker = [[UIImagePickerController alloc] init];
        imagepicker.allowsEditing = NO;
        imagepicker.delegate = self;
        imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagepicker.navigationBar.opaque = true;


        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            popoverController = [[UIPopoverController alloc] initWithContentViewController:imagepicker];

            [popoverController presentPopoverFromBarButtonItem:reset permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

        } else {
            [self presentModalViewController:imagepicker animated:YES];   
        }
    }
}

但是,当调用它时,视图会因错误而崩溃:

'NSInvalidArgumentException',原因:'-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated:]:无法从没有窗口的视图中呈现弹出框。

我究竟做错了什么?先感谢您。

4

1 回答 1

0

看起来您正在尝试在不在视图层次结构中的项目上创建弹出框。如果您的按钮正在调用此方法,则将方法标题更改为 -(void) chooseImage:(id)sender 并尝试从工具栏上的 UIBarButton 显示弹出框。

此外,如果您使用的是 ARC(看起来像您),则必须保留您的 UIPopover 否则它将在仍然需要时释放,请参阅此堆栈溢出帖子。你可能已经这样做了,但我想我会提出它,因为我看不到你是否/如何指定了你的 popoverController。

于 2012-06-10T00:45:17.523 回答