在UIPopoverController中显示UIImagePickerController与现有的UINavigationController(添加后退按钮)

时间:2012-05-05 14:41:30

标签: objective-c ios uikit uiimagepickercontroller uipopovercontroller

所以我有一个UIPopoverController我的UINavigationController所在的地方UITableViewControllerUITableView的一个选项就是去选择一张图片UIImagePickerController ...现在在iPhone上我可以简单地使用presentModalViewController:animated:,但是在UIPopoverController中调用它会导致崩溃,这是不可能的......

我也知道UIImagePickerController需要自己UINavigationController所以我不能只推pushViewController:animated: ...

所以我想出如果我保留了我创建的UIPopoverController的链接,那么我可以使用setContentViewController:animated:切换到UIImagePickerController的viewController ......

但是,我现在仍然坚持让用户回到之前的UINavigationController,因为我需要能够向UIImagePickerController添加取消按钮,但是当我尝试做的时候这个取消按钮不会被添加......

继承我正在使用的代码

-(void)doPhotoalbums {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        [imagePicker setDelegate:self];
        [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
        [imagePicker setContentSizeForViewInPopover:CGSizeMake(320, 480)];

        UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:nil];
        [imagePicker.navigationItem setLeftBarButtonItem:cancel];

        //[self presentModalViewController:imagePicker animated:YES];
        [[self parentPopoverController] setContentViewController:imagePicker animated:YES];

    } else {
        [UIAlertView showMessage:@"This device does not have any photo albums."];
    }
}

所以我的问题是..有谁知道如何解决这个问题?通过添加取消/返回按钮我可以挂钩以使navigationControllers切换回来或另一种方式来呈现这个(我想避免在两个UIPopoverControllers之间切换,但我不知道我还能做什么.. < / p>

由于

利安

1 个答案:

答案 0 :(得分:11)

啊......经过一段时间的休息,我发现了这个:https://discussions.apple.com/thread/1710435?start=0&tstart=0

使用UINavigationControllerDelegate,您可以使用navigationController:willShowViewController:animated:方法访问navigationBar ..然后使用一些代码(如下),您可以添加一个按钮。

if ([navigationController isKindOfClass:[UIImagePickerController class]]) {

    UINavigationBar *bar = navigationController.navigationBar;
    UINavigationItem *top = bar.topItem;

    UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(imagePickerControllerDidCancel:)];
    [top setLeftBarButtonItem:cancel];

} else { 

    //do non imagePickerController things 

}