如何确定当前视图控制器呈现的是哪个视图控制器? (苹果手机)
Posted
技术标签:
【中文标题】如何确定当前视图控制器呈现的是哪个视图控制器? (苹果手机)【英文标题】:How to determine what view controller presented the current view controller? (iphone) 【发布时间】:2014-01-30 20:02:27 【问题描述】:根据呈现当前视图控制器的视图控制器,我需要当前视图控制器被两个呈现视图控制器中的任何一个解除。
这是当前视图控制器中的方法:
-(void)goBack:(id)sender
if ([self.presentingViewController.presentingViewController isKindOfClass:[InitialViewController class]])
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
else
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
但它不起作用。我究竟做错了什么?非常感谢您!
【问题讨论】:
也许你应该多描述一下架构。您确定这是呈现的视图控制器情况而不是推送/弹出情况吗?如果是,您想区分什么?您真正想实现什么? 另外,请注意您所说的presentViewController
的视图控制器实际上可能不是presentingViewController
。很容易对此感到困惑。
是的,对不起,我应该更准确。在某些情况下,我当前的视图控制器由 SecondViewController 呈现,以防万一由 FirstViewController 呈现。在其他情况下,我当前的视图由 FirstViewController 直接呈现。我的目标是,当当前视图控制器被关闭时,FirstViewController 会出现。
在这种情况下self.presentingViewController.presentingViewController
应该可以工作。它适用于我的机器。
可能问题是你在if/else
测试中写错了条件。使用日志记录来确保所做的选择是您所期望的。
【参考方案1】:
您解雇的方法没有任何问题(尽管我之前的回答错误!)。有什么问题是你的逻辑。问题是这一行:
if ([self.presentingViewController.presentingViewController isKindOfClass:[InitialViewController class]])
改成:
if ([self.presentingViewController isKindOfClass:[SecondViewController class])
这应该完全符合您的要求。
【讨论】:
【参考方案2】:如果您想获取呈现特定视图控制器的视图控制器,只需执行viewController.presentingViewController
。这应该始终设置为呈现当前视图控制器的任何视图控制器,这就是重点。因此,如果您想关闭当前视图控制器,请执行以下操作:
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
【讨论】:
以上是关于如何确定当前视图控制器呈现的是哪个视图控制器? (苹果手机)的主要内容,如果未能解决你的问题,请参考以下文章
如果当前视图控制器被呈现并推送,如何展开到正确的视图控制器?