从子视图中解除ModalViewController

时间:2012-04-11 06:53:30

标签: iphone ios xcode modalviewcontroller subview

我的函数调用有问题:

[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];

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

3 个答案:

答案 0 :(得分:2)

可以尝试

[app.viewController dismissModalViewControllerAnimated:YES];

希望这有帮助。

答案 1 :(得分:2)

这可能对您有用:

[self.view dismissModalViewControllerAnimated:YES];

答案 2 :(得分:0)

如果您要从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];

基本上,如果你需要保持对presentViewController的持久引用,可以使用你的appDelegate的控制器来呈现和解除模态...因为上面的所有内容都不起作用我的情况。

如果您正在使用ipadDelegate,请务必检查MainWindow_iPad.xib中的演示模式。您的“过渡风格”应为“覆盖垂直”,“演示”应为“当前上下文”,或者您的模式可能出现在其他视图后面。