从子视图中关闭 ModalViewController

Posted

技术标签:

【中文标题】从子视图中关闭 ModalViewController【英文标题】:Dismiss ModalViewController from subview 【发布时间】:2012-04-11 06:53:30 【问题描述】:

函数调用有问题:

[self dismissModalViewControllerAnimated:YES];

在 MainViewController 中,我可以启动一个图像选择器并像往常一样通过单击取消按钮来关闭。

(IBAction) LaunchInMain:(id)sender

    MainAppDelegate *app = (MainAppDelegate *)[[UIApplication sharedApplication] delegate];

    //elcPicker is a customized image picker
    [app.viewController presentModalViewController:elcPicker animated:YES];
    [elcPicker release];
    [albumController release];

- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker 
    [self dismissModalViewControllerAnimated:YES];

现在,我不是直接在 Main 中启动它,而是先添加一个子视图,然后使用相同的启动方法从子视图启动图像选择器。

问题:

无法关闭图像选择器并且无法再次显示子视图。所以无论我点击什么,屏幕都将保留在图像选择器中。

我一直在尝试其他一些电话,例如没有任何成功:

[self dismissModalViewControllerAnimated:YES];

我对任何帮助或想法都很满意。如果您认为应该提供更多信息,我可以添加更多代码。

【问题讨论】:

你确定自己是你的elcPicker吗?试试 [elcPicker dismissModalViewControllerAnimated:YES]; 【参考方案1】:

可以试试

[app.viewController dismissModalViewControllerAnimated:YES];

希望这会有所帮助。

【讨论】:

是的,我的解决方法与您的建议非常相似。基本上,我只是用同一个控制器来解雇它。谢谢【参考方案2】:

这可能对你有用:

[self.view dismissModalViewControllerAnimated:YES];

【讨论】:

【参考方案3】:

如果您从 UISplitViewController 呈现模态视图,则此方法有效。它还可以以许多其他方式应用...

首先,在您的 .h 文件中为您的 appDelegate 创建一个实例 (AppDelegate_iPad *appDelegate),然后将其放入您的 viewDidLoad 或类似方法中:

ipadDelegate = (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];

现在,像这样呈现第一个模态视图:

    YOURVC *vc = [[YOURVC alloc] initWithNibName:@"YOURVC" bundle:nil];
    [ipadDelegate.splitViewController presentModalViewController:vc animated:YES];
    [vc release];

假设您有一个子视图,例如 UITableView,并且想要从 didSelectRowAtIndexPath 中关闭模式。使用子视图解除模式所需要做的就是在子视图的 .h 中创建另一个 ipadDelegate 实例(如果需要),再次引用 [[UIApplication sharedApplication] 委托],然后解除:

[ipadAppDelegate.splitViewController dismissModalViewControllerAnimated:YES];

本质上,尽管冗长,但如果您需要保持对presentingViewController 的持久引用,请使用您的appDelegate 的控制器来呈现和关闭模态...因为以上所有内容都不起作用我的情况。

如果您使用 ipadDelegate 进行演示,请确保检查 MainWindow_iPad.xib 中的演示模式。您的“过渡样式”应为“Cover Vertical”,“Presentation”应为“Current Context”,否则您的模态可能会出现在其他视图后面。

【讨论】:

以上是关于从子视图中关闭 ModalViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何从子窗口关闭父窗口?

从子视图中删除视图不会调用 willRemoveSubview

如何从子视图中隐藏 NavigationBar?

如何从子视图中隐藏信息按钮?

从子视图调用超级视图函数

Emberjs:从子视图中解析表单数据