2

我的函数调用有问题:

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

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

4

3 回答 3

2

可以试试

[app.viewController dismissModalViewControllerAnimated:YES];

希望这可以帮助。

于 2012-04-11T07:02:45.007 回答
2

这可能对您有用:

[self.view dismissModalViewControllerAnimated:YES];
于 2012-04-12T05:15:36.457 回答
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];

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

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

于 2012-08-21T17:14:32.773 回答