从子视图中关闭 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的主要内容,如果未能解决你的问题,请参考以下文章