从子视图中的另一个viewController中关闭ModalViewController

时间:2011-05-04 10:11:33

标签: iphone sdk subview modalviewcontroller

我有一个名为A open with presentModalViewController方法的视图,在此视图中我使用以下方式加载了辅助视图:

new_view = [[new_websongs alloc] initWithNibName:@"new_websongs" bundle:nil]; [mysubview addSubview:new_view.view]; 好的,到这里它没关系但是现在我需要忽略调用方法[self dismissModalViewControllerAnimated:YES]的第一个视图“A”,如果第一个“A”viewController来自辅助视图控制器(new_view)但不起作用!代码是:

self.Aviewcontroller = [[Aview alloc] init];
[Aviewcontroller dismissModalViewControllerAnimated:YES];
[Aviewcontroller release];

请帮助我!!!! 感谢

5 个答案:

答案 0 :(得分:0)

你试过[self.parentViewController dismissModalViewControllerAnimated:YES];

吗?

答案 1 :(得分:0)

你有一个逻辑问题。开始阅读View Controller Programming Guide for iOS

呈现模态视图控制器的视图控制器必须将其解除,否则模态视图控制器必须自行解除它

答案 2 :(得分:0)

完全同意其他答案;从逻辑上思考视图控制器顺序和类型的顺序。因此,请考虑哪些控制器以模态方式显示,以及通过导航控制器显示的控制器。

您当然可以使用以下方法设置多个视图控制器:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

没有动画,然后在需要时调用说:

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated

在您的视图控制器堆栈中显示指定的视图控制器。

希望这有助于思考您需要做什么?在单独的项目中考虑应用程序界面中视图控制器的顺序和类型通常是个好主意 - 您可以在设备本身上进行尝试。

答案 3 :(得分:0)

试试这个应该有效

    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

答案 4 :(得分: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中的演示模式。您的“过渡风格”应为“覆盖垂直”,“演示”应为“当前上下文”,或者您的模式可能出现在其他视图后面。