Iphone 在imagePickerController完成后,向viewController显示模态
在从Iphone 在imagePickerController完成后,向viewController显示模态,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,在从imagePickerController中选择图像后,我需要调用视图控制器,因此我使用了以下代码: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"Image
imagePickerController
中选择图像后,我需要调用视图控制器,因此我使用了以下代码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
imageEditorView.mainViewController = self;
imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];
[self presentViewController:imageEditorView animated:YES completion:nil];
}
但调试器给了我一个警告:
Warning: Attempt to present <ImageEditorViewController: 0xaa42320> on
<ViewController: 0x9b58680> whose view is not in the window hierarchy!
首先,您必须关闭UIImagePickerController,然后只有您可以使用presentViewController来创建另一个视图控制器 您可以使用下面的代码
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self dismissModalViewControllerAnimated:YES];
imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
imageEditorView.mainViewController = self;
imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];
[self presentViewController:imageEditorView animated:YES completion:nil];
}
我认为在
AppDelegate
中,您没有设置窗口的rootViewController
。
因此,与其将子视图
添加到窗口
,不如将窗口的根视图控制器
另一件事可能是您当前的viewController
实际上是另一个viewController
的子视图
我建议将self.window.rootViewController=yourMaincontroller
放入AppDelegate
更新:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
imageEditorView.mainViewController = self;
imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];
[self performSelector:@selector(presentPicture) withObject:nil afterDelay:2.0];
[self dismissModalViewControllerAnimated:YES];
}
-(void)presentPicture
{
[self presentViewController:imageEditorView animated:YES completion:nil];
}
使用以下代码,如:
[self dismissViewControllerAnimated:YES completion:^{
[self.parentViewController presentViewController:imageEditorView animated:YES completion:nil];
}];
警告:在演示过程中尝试在上演示代码>当我解除它时!首先删除图像选择器,然后尝试显示视图控制器。只需发布didFinishLaunchingWithOptions方法的代码请…@ParasJoshi签出编辑question@Momi现在用我的didFinishLaunchingWithOptions方法替换didFinishLaunchingWithOptions方法…xcode自动将这行代码放入appDelegate,不需要添加。谢谢,但问题相同!“警告:尝试显示不在窗口层次结构中的视图!”看到这个答案,我认为这是因为您的窗口不适用于多页窗口,所以。。。但是现在它可以用这个代码工作,但是我想这里遗漏了一些东西,伙计。@Momi只是改变了[self dismissModalViewControllerAnimated:YES]的流程;行如果不起作用的话。。只需尝试一下,并添加您想要的延迟时间,但这是最好的..应用程序崩溃与此问题:由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:'-[ViewController dismissModalViewController:完成:]:无法识别的选择器发送到实例0x9b2f3b0
@Momi:您正在使用哪个ios版本?@Momi:我的答案中有一个输入错误,现在检查答案
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
imageEditorView.mainViewController = self;
imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];
[self performSelector:@selector(presentPicture) withObject:nil afterDelay:2.0];
[self dismissModalViewControllerAnimated:YES];
}
-(void)presentPicture
{
[self presentViewController:imageEditorView animated:YES completion:nil];
}
[self dismissViewControllerAnimated:YES completion:^{
[self.parentViewController presentViewController:imageEditorView animated:YES completion:nil];
}];