如何找到推送了哪个 viewController?

Posted

技术标签:

【中文标题】如何找到推送了哪个 viewController?【英文标题】:How do I find which viewController has pushed? 【发布时间】:2020-01-22 14:45:40 【问题描述】:

我有简单的导航代码,可以从一个viewController 转换到下一个。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"myVC"];

UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

[myNavigationController pushViewController:viewController animated:NO];

这样我收到错误消息:

...正在推送同一个视图控制器实例...不止一次,这是不受支持的,很可能是应用程序中的错误

现在,我了解到在应用程序的某处,相同的 viewController 已(或可以?)被推送,并且需要删除或以其他方式处理该代码行。问题是,我正在从事一个大型项目,但不知道该代码行可能在哪里。

那么,问题是,我该如何处理呢?我可以在pushing“正确”viewController之前以编程方式poppushedviewController吗?或者有什么方法可以找到导致问题的push?或者我可以通过其他方式解决 Ibn 吗?

【问题讨论】:

【参考方案1】:

导航视图控制器是一堆 VC。如果你走堆栈,你可以看到它是什么类型的对象。然后,您可以对类类型名称进行简单的字符串比较。

【讨论】:

谢谢,但是我如何“走堆栈”?你能说得更准确一点吗?

以上是关于如何找到推送了哪个 viewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何多次推送同一个 ViewController?

如何关闭并推送新的 ViewController

单击tableview单元格行时如何推送新的viewcontroller?

如何在 Swift 中获取父 ViewController 的类名?

如何检测您的 ViewController 是不是是从 AppDelegate 推送的?

如何在新窗口中推送 ViewController