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

时间:2016-03-02 08:53:57

标签: ios objective-c storyboard

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

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

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

3 个答案:

答案 0 :(得分:2)

使用NSStringFromClass()。它将类的名称返回为string

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

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

如果要获取当前视图控制器,请执行

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

获取以前的Viewcontrollers

您可以使用UINavigationController' viewControllers属性:

  

@property(非原子,复制)NSArray * viewControllers

NSArray * allViewController = self.navigationController.viewControllers;

另一种选择

获取导航使用中可用的viewcontrollers的数量,如

NSInteger totalCount = self.navigationController.viewControllers.count;

<强>更新

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

答案 1 :(得分:2)

您必须迭代导航堆栈并使用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。在这里,我们迭代它们并在数组中添加它们的类名。您的第一个ViewController将位于0数组索引处,而您的最后一个(当前显示的视图控制器)将位于count-1索引处。

只有通过导航控制器展示viewControllers时,此解决方案才有效。如果您使用模态演示文稿,它将无法正常工作。由于您的帖子给人的印象是您正在使用导航控制器,并且您说您正在这样做,因此解决方案也适用于导航控制器方法。

答案 2 :(得分:0)

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

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