【问题标题】:How to get the name of the view controller?如何获取视图控制器的名称?
【发布时间】:2016-03-02 08:53:56
【问题描述】:

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

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

但是我在情节提要中使用了这种方法,这不起作用,任何人都可以帮助解决这个问题

【问题讨论】:

  • 你试图获取当前视图控制器名称
  • 这不是视图控制器的名称,而是视图控制器实例的数组。
  • 是的,如何在情节提要中使用此代码,我可以使用@trojanFoe
  • 你的意思是视图控制器的title
  • 您要问的是哪个 name?故事板ID?班级名称? xib 名称(如果不同)?

标签: ios objective-c storyboard


【解决方案1】:

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

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

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

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

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

获取以前的视图控制器

您可以使用UINavigationControllerviewControllers 属性:

@property(nonatomic, copy) NSArray *viewControllers

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);

【讨论】:

  • 我需要获取我浏览过的所有视图控制器的名称。,
  • 它返回 NULL,我在情节提要的 xib bur 中发布的代码我无法得到结果。
  • @Arun -- presentViewController 没有嵌入Navigation controller,如果需要,我们需要手动实现导航控制器,这就是你没有得到全部的原因查看控制器名称
  • 你必须做[self.navigationController pushViewController:vc animated:YES]。你的命名约定也很麻烦。
  • 简单,把[self presentViewController:vc animated:YES completion:nil];改成[self.navigationController pushViewController:vc animated:YES];就行了
【解决方案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 将位于数组的0 索引处,而您的最后一个(当前呈现的视图控制器)将位于count-1 索引处。

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

【讨论】:

  • 最短且正确的答案。我支持。 @Arun,使用它。如果您想要视图控制器的标题,正如您的问题下 cmets 中提到的@Andrey Gordeev,那么代码将类似于NSString *vcTitle = vc.title; [viewControllerNames addObject:vcTitle];
【解决方案3】:

这可能会帮助您解决问题
在 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];
  ....

【讨论】:

  • 如果只有一个 ViewController 数组和索引超出范围,这段代码将会崩溃。另外,访问 VC 不是他的问题。
  • 嘿@NSNoob 我刚刚提出了可能的方法。您可以根据自己的要求构建逻辑。
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多