多模态 UIViewControllers |仅关闭顶部模态 UIViewController

Posted

技术标签:

【中文标题】多模态 UIViewControllers |仅关闭顶部模态 UIViewController【英文标题】:Muiltple Modal UIViewControllers | Dismiss Top Modal UIViewController Only 【发布时间】:2014-02-06 11:17:20 【问题描述】:

我的UIViewController 堆栈如下所示:

+------ UIViewController_C (presented)
+---- UIViewController_B (presented)
+-- UIViewController_A (pushed)

当我在 UIViewController_C 上调用 -dismissViewController:animated 时,UINavigationControllerboth UIViewController_CUIViewController_B 一起解雇,根据文档,_C 上带有动画,@ 上没有动画987654329@.

解除_C 的最合规方式是什么?

【问题讨论】:

请分享您的代码。在一般情况下它应该可以工作。 - 找到了解决方案;将在 8 小时后添加,因为我的表现不佳,我无法写出来。 谢谢@malex - 超级亲切;我和你的思路大致相同,我会尽快分享(T-4 小时)。 【参考方案1】:

尝试如下

推送到 UIViewController_A 后,呈现 UIViewController_B 如下代码。

UIViewController_B *bbp=[[UIViewController_B alloc]initWithNibName:@"UIViewController_B" bundle:nil];
UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:bbp];
passcodeNavigationController.navigationBar.hidden=YES;
[self.navigationController presentModalViewController:passcodeNavigationController animated:YES];
[passcodeNavigationController release];

现在从 UIViewController_B 尝试在 UIViewController_C 中呈现如下代码。

    UIViewController_C *bbp=[[UIViewController_C alloc]initWithNibName:@"UIViewController_C" bundle:nil];
UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:bbp];
passcodeNavigationController.navigationBar.hidden=YES;
[self.navigationController presentModalViewController:passcodeNavigationController animated:YES];
[passcodeNavigationController release];

视图控制器的每个后退按钮上的最后和最后一件事写在下面的代码行。

[self dismissModalViewControllerAnimated:YES];

如果您需要比下面评论更多的帮助。

【讨论】:

【参考方案2】:

一种解决方案:

UIViewControllers 模态显示不一定是deallocated on -dismissViewController:animated

这意味着通过将UIViewController_A 的引用通过_B 传递给_C,您可以通过UIViewController_A 分别为UIViewControllers 调用-presentViewController:animated-dismissViewController:animated

代码:

1. UIViewController_B

- (void) showUIViewController_C 

    [self dismissViewControllerAnimated:TRUE completion:^
        UIViewController_C *controller_C = [[UIViewController_C alloc] init];
        controller_C.parentController = self;
        [self.parentController controller_C animated:TRUE completion:nil];
    ];

2。 UIViewController_C

- (void) dismissUIViewController_C 

    [self dismissViewControllerAnimated:TRUE completion:^
        [self.parentController.parentController presentViewController:self.parentController animated:TRUE completion:nil];
    ];

我在哪里使用*parentController 作为堆栈上您之前的@​​987654334@ 可能是的任何类的命名约定。

它短暂地回到UIViewController_A,因为我在完成块中调用-dismiss-present,尽管这实际上看起来很有趣。

【讨论】:

以上是关于多模态 UIViewControllers |仅关闭顶部模态 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 在模态视图控制器的动画演示中滚动到不同的位置

UIPageViewController 中的相同 UIViewControllers

多模态融合综述

16.4 多模态情感识别

笔记多模态情感分析研究综述

多模态分析数据集(Multimodal Dataset)整理