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



我使用以下代码来获取到目前为止导航的视图控制器的名称,

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
NSLog(@"%@",navigationArray);

但是我在故事板中使用此方法不起作用,任何人都可以帮助解决此问题

使用 NSStringFromClass()。它以string的形式返回类的名称。

如果你想获取一些视图控制器名称,请喜欢

   NSString *viewName = NSStringFromClass([yourviewControllerName class]);

如果要获取当前视图控制器,请喜欢

NSString *viewName = NSStringFromClass([self class]);

获取以前的视图控制器

您可以使用UINavigationControllerviewControllers属性:

@property(非原子,副本) NSArray *viewController

NSArray * allViewController = self.navigationController.viewControllers;

另一种选择

获取导航用途中可用的视图控制器计数,例如

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];
}

在属性self.navigationController.viewControllers中,存储所有尚未弹出的视图控制器。在这里,我们迭代它们并将它们的类名添加到数组中。您的第一个ViewController将位于数组的索引0最后一个(当前呈现的视图控制器)将位于count-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];
  ....

最新更新