如何在iOS中的当前视图控制器之前查找所有视图控制器?

问题描述:

用户可以通过不同的路径访问我的应用中的特定视图控制器。
我想知道用户到达当前视图控制器的确切路径。

任何建议将不胜感激。如何在iOS中的当前视图控制器之前查找所有视图控制器?

+1

您可以在singelton类中维护一堆ViewControllers。 –

在当前视图控制器的viewDidAppear(),viewWillAppear()viewDidLoad()方法中使用以下代码。我用它viewDidLoad()方法。

for (int i=0;i<[self.navigationController.viewControllers count];i++) 
{ 
    NSLog(@"%d>>>>>>>>>%@",[self.navigationController.viewControllers objectAtIndex:i]); 
} 
+0

唯一的问题是:你不能跟踪它,它只是一个控制台的记录器。 – prabodhprakash

+0

我只需要检查用户浏览过的视图,并在用户已经通过层次结构中的视图控制器时显示标签。 –

+0

为您可以添加一个全球或本地位,这将检查用户是否通过当前视图控制器来到 –

我在我的一个项目中遇到了类似的问题,我创建了一个维护一堆ViewController的单例类。每个ViewController负责从堆栈推送和弹出自己。因此,只要我们想要用户遵循流程,我们就会查询堆栈。

它对我们来说相当不错。

您可以通过比较其检查你的控制器,把你需要的类,而不是“XYZViewController”的

for (UIViewController * aController in self.navigationController.viewControllers) 
    { 
     if (aController isKindOfClass:[XYZViewController class]) 
     { 
      //You can do your work here 
     } 
    } 
+0

嗯,我在寻找一种可以在所有情况下使用的一般方法。 –

+1

你可以在AppDelegate中设置一个变量并通过它比较所需的一个类 –

+0

@MdIbrahimHassan这个解决方案有什么问题?你应该接受这个。 –

您可以使用这种方式的导航堆栈结识之前其的viewController在那里你到达了某个View控制器。

这里是代码:

for (UIViewController *vc in self.navigationController.viewControllers) { 
    NSLog(@"vc desc : %@", vc.description); 
} 

但是,如果你想显示的标签,如果用户来自某些VC,当其他的ViewController前来VC不显示的标签,然后在ViewController中使用一个布尔值,在该布尔值中需要显示标签,然后将布尔值设置为YES,同时从前一个VC推入并检查该布尔值以显示标签。