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 不起作用