Dismiss ModalView 在这里不起作用

Posted

技术标签:

【中文标题】Dismiss ModalView 在这里不起作用【英文标题】:Dismiss ModalView does not work here 【发布时间】:2011-07-25 17:38:30 【问题描述】:

所以我有一个 tabBarController 作为模态视图,它显示得很好。当我单击一些选项卡时,视图正在正确加载。我想在点击tabBarController.selectedIndex ==4时关闭modalView

所以我在viewDidLoad 中写入,并在该视图控制器的viewWillAppear 中尝试了dismissModalViewController,但它不起作用。

我试过了

[self.parentViewController dismissModalViewControllerAnimated:YES];

      // ... And also //

[self dismissModalViewControllerAnimated:YES];

有人能指出为什么它不起作用吗?

【问题讨论】:

您将 tabBarController 呈现为模态视图控制器,还是您试图将其关闭的视图控制器? 我将 tabBarController 显示为 modalViewController,我想在其中一个选项卡中将其关闭。 【参考方案1】:

您所要做的就是传递对模态呈现的 VC 的引用,指向将以模态呈现它的 VC。

将弱引用定义为 UITabBarController 子类中的属性,并在需要时发送消息将其关闭。

例如使用名为mainViewController 的属性:

MySubclass *tbController = [[MySubclass ....];
tbController.mainViewController = self;
[self presentModalViewController:tbController animated:YES];

然后在 MySubclass 中定义

@property(assign) UIViewController *mainViewController;

并合成它,然后当你想要的选项卡被选中时:

[self.mainViewController dismissModalViewControllerAnimated:YES];

【讨论】:

这不起作用。没关系。我用 NSNotifications 驳回了它.. FML !无论如何 +1。 @Legolas - 我几乎每天都这样做;)认为您在实施此解决方案时遗漏了一些东西 这是什么意思? tbController.mainViewController = self; ? @Legolas - 这意味着您将您在标签栏控制器子类中定义的属性设置为self,这是以模态方式呈现另一个的VC。一旦你这样做了,你就可以从你的标签栏控制器子类中向那个 VC 发送消息,尤其是在这种情况下,让它以模态方式关闭 VC。 它是 UIViewController 的子类。但是,是的,我现在明白你的想法了。似乎合乎逻辑。让我试试看。【参考方案2】:

我认为第四个视图控制器(标签栏控制器的)正试图被这条线解雇

[self.parentViewController dismissModalViewControllerAnimated:YES];

由于第 4 个视图控制器没有由任何控制器呈现,因此这不起作用。

它正在逐行解除它的模态视图控制器

[self dismissModalViewControllerAnimated:YES];

由于第 4 个视图控制器没有提供任何视图控制器,因此这又不应该工作。

您想要关闭标签栏控制器,而不是它的第四个视图控制器。

基本上,您可以从第 4 个视图控制器获取标签栏控制器的引用。 如,[yourFourthViewController.tabBarController.parentViewController dismissModalViewControllerAnimated:YES];

我在没有实际尝试的情况下猜测这一点。让我知道这是否有效。

【讨论】:

我通过通知将其关闭。无论如何都要为您的帮助 +1。【参考方案3】:

如果您将 UINavigationController 作为父控制器,那么以下行将适合您。

[selfdismissModalViewControllerAnimated:YES];

但在这里我认为你的 UIViewController 是父控制器而不是 UINavigationController。所以,当 presentModalViewController 时,你可以做一件事。

if(objView == nil)
    objView = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];

UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:objView];

[self presentModalViewController:navigationController1 animated:YES];

如果您需要更多帮助或有任何问题,请告诉我。

【讨论】:

If you have the UINavigationController as the parent controller then the following line will work for you. [self dismissModalViewControllerAnimated:YES];... 是这样吗! ?

以上是关于Dismiss ModalView 在这里不起作用的主要内容,如果未能解决你的问题,请参考以下文章

离子 3 警报;调用dismiss()后调用present()不起作用

带有文本字段的 resignFirstResponder 不起作用

presentationMode.wrappedValue.dismiss() 无法正常工作

未以编程方式检测 Dismiss Popover

Android事件分发机制

AngularJS Bootstrap 警报关闭超时属性不起作用