Ios 如何获取视图控制器的名称?

Ios 如何获取视图控制器的名称?,ios,objective-c,storyboard,Ios,Objective C,Storyboard,我正在使用以下代码获取迄今为止导航的视图控制器的名称 NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; NSLog(@"%@",navigationArray); 但是我在故事板中使用了这种方法,这不起作用,任何人都可以帮助解决这个问题。它以字符串的形式返回类的名称 如果要获取某些视图控制器名称,请执行以下操作

我正在使用以下代码获取迄今为止导航的视图控制器的名称

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
NSLog(@"%@",navigationArray);
但是我在故事板中使用了这种方法,这不起作用,任何人都可以帮助解决这个问题。它以
字符串的形式返回类的名称

如果要获取某些视图控制器名称,请执行以下操作

   NSString *viewName = NSStringFromClass([yourviewControllerName class]);
NSString *viewName = NSStringFromClass([self class]);
如果要获取当前视图控制器,请执行以下操作

   NSString *viewName = NSStringFromClass([yourviewControllerName class]);
NSString *viewName = NSStringFromClass([self class]);
获取以前的ViewController

您可以使用
UINavigationController
viewControllers
属性:

@属性(非原子,复制)NSArray*视图控制器

另一种选择

获取导航中可用的ViewController的计数,如

NSInteger totalCount = self.navigationController.viewControllers.count;
已更新

UIViewController *allViewController = self.navigationController.viewControllers[totalCount - 2];
Class previousVCClass = [allViewController class];
NSString *className = NSStringFromClass(previousVCClass);
使用。它以
字符串的形式返回类的名称

如果要获取某些视图控制器名称,请执行以下操作

   NSString *viewName = NSStringFromClass([yourviewControllerName class]);
NSString *viewName = NSStringFromClass([self class]);
如果要获取当前视图控制器,请执行以下操作

   NSString *viewName = NSStringFromClass([yourviewControllerName class]);
NSString *viewName = NSStringFromClass([self class]);
获取以前的ViewController

您可以使用
UINavigationController
viewControllers
属性:

@属性(非原子,复制)NSArray*视图控制器

另一种选择

获取导航中可用的ViewController的计数,如

NSInteger totalCount = self.navigationController.viewControllers.count;
已更新

UIViewController *allViewController = self.navigationController.viewControllers[totalCount - 2];
Class previousVCClass = [allViewController class];
NSString *className = NSStringFromClass(previousVCClass);

您必须在导航堆栈上迭代,并使用Anbu的解决方案检索它们的类名:

NSMutableArray* viewControllersNames = [[NSMutableArray alloc] init];
for(UIViewController *vc in self.navigationController.viewControllers)
{
    NSString *vcName = NSStringFromClass([vc class]);
    [viewControllersNames addObject:vcName];

}
在属性中,将存储所有尚未弹出的ViewController。在这里,我们对它们进行迭代,并将它们的类名添加到数组中。第一个
ViewController
将位于数组的
0
索引,最后一个(当前显示的视图控制器)将位于
count-1
索引


只有通过导航控制器显示ViewController时,此解决方案才有效。如果您使用的是模态演示,它将不起作用。由于您的帖子给人的印象是您正在使用导航控制器,并且您说您正在这样做,所以解决方案也是针对导航控制器的方法。

您必须在导航堆栈上迭代,并使用Anbu的解决方案检索它们的类名:

NSMutableArray* viewControllersNames = [[NSMutableArray alloc] init];
for(UIViewController *vc in self.navigationController.viewControllers)
{
    NSString *vcName = NSStringFromClass([vc class]);
    [viewControllersNames addObject:vcName];

}
在属性中,将存储所有尚未弹出的ViewController。在这里,我们对它们进行迭代,并将它们的类名添加到数组中。第一个
ViewController
将位于数组的
0
索引,最后一个(当前显示的视图控制器)将位于
count-1
索引


只有通过导航控制器显示ViewController时,此解决方案才有效。如果您使用的是模态演示,它将不起作用。由于您的帖子给人的印象是您正在使用导航控制器,并且您说您正在这样做,所以解决方案也适用于导航控制器方法。

这可能有助于您解决问题
在故事板上选择每个视图控制器并转到类检查器。然后为每个视图控制器设置唯一的情节提要标识符。
您可以访问任何视图控制器的实例。

id controller =  [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ControllerIdentifier"];

另一种方式

  NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
  id  controller1 = [navigationArray objectAtIndex: 0];
  id  controller1 = [navigationArray objectAtIndex: 1];
  ....

这可能有助于您解决问题
在故事板上选择每个视图控制器并转到类检查器。然后为每个视图控制器设置唯一的情节提要标识符。
您可以访问任何视图控制器的实例。

id controller =  [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ControllerIdentifier"];

另一种方式

  NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
  id  controller1 = [navigationArray objectAtIndex: 0];
  id  controller1 = [navigationArray objectAtIndex: 1];
  ....


您试图获取的当前视图控制器名称不是视图控制器的名称,这是一个视图控制器实例数组。是的,如何在故事板中使用此代码,我可以使用@特洛伊木马吗?可能您指的是视图控制器的
标题
?您询问的是哪个名称?情节提要id?班名?xib名称(如果不同)?您试图获取的当前视图控制器名称不是视图控制器的名称,这是一个视图控制器实例数组。是的,如何在故事板中使用此代码,我可以使用@特洛伊木马吗?您可能指的是视图控制器的
标题
?您询问的是哪个名称?情节提要id?班名?xib名称(如果不同)?我需要获取我导航过的所有视图控制器的名称。它返回NULL,我在故事板中发布的代码在xib中工作,但我无法获取结果。@Arun--presentViewController未嵌入
导航控制器
,如果需要,我们需要手动实现导航控制器,这就是您无法获得所有视图控制器名称的原因。您必须执行
[self.navigationController pushViewController:vc animated:YES]
。您的命名约定也很麻烦。简单,只需更改此
[self-presentViewController:vc-animated:YES-completion:nil]
[self.navigationController-pushViewController:vc动画:是],这就是我需要获取我导航过的所有视图控制器的名称的全部内容。它返回NULL,我在故事板中发布的代码在xib中工作,但我无法获得结果。@Arun--presentViewController未嵌入
导航控制器
,如果需要,我们需要手动实现导航控制器,这就是为什么您没有获得所有视图控制器的名称,您必须执行
[self.navigationController pushViewController:vc animated:YES]
。您的命名约定也很麻烦。简单,只需更改此
[self-presentViewController:vc-animated:YES-completion:nil]
[self.navigationController-pushViewController:vc动画:是],这是最短最正确的答案。我支持@阿伦,用它。如果您想要查看控制器的标题,正如您问题下的注释中提到的@Andrey Gordeev,那么代码将类似于
NSString*vcTitle=vc.title;[viewControllerNames添加对象:vcTitle]最短且正确的答案。我支持@阿伦,用它。如果您想要查看控制器的标题,如中提到的@Andrey Gordeev