2012-12-04 32 views
62

尝试查看UIViewController或UIView是否可以识别它的Storyboard ID。因此,希望为:以编程方式获取故事板ID?

UIViewController *aViewController; 
    NSString *storyboardID = aViewController.storyboard.id; //not an actual property 

或:

NSString *storyboardID = [aViewController.storyboard valueForKey:@"storyboardId"]; //also not a working call 

,但没有喜悦,无法在网上找到类似的解决方案。有谁知道这是否可能?

+0

只是感兴趣的一点,您可以使用'[aViewController.storyboard valueForKey:@“name”];'。其他答案虽然更好。 –

+0

它是'storyboardIdentifier'。 – Andy

+0

@Andy storyboardIdentifier在哪里? – ArgaPK

回答

86

您可以使用restoreIdentifier,它位于故事板标识的正上方,它是一个UIViewController属性。

+0

对于为早期iOS版本制作应用程序或静态库的人,restoreIdentifier属性为iOS 6.0+ – Jalakoo

+5

只需在“界面”构建器中勾选“使用Storyboard ID”即可自动将故事板ID用作restoreIdentifier属性。它将被动态设置,而不必输入两次。 – thgc

+3

[参考restoreIdentifier](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instp/UIViewController/restorationIdentifier)说:'价值该属性默认为零,这表明视图的状态不需要保存。 这意味着将restorationIdentifier设置为非零有一些副作用! – ypresto

20

故事板ID仅用于从故事板中查找和实例化VC。 正如UIStoryboard参考文献所述:

“此标识符不是视图控制器对象本身的属性,仅供故事板文件用于查找视图控制器。”

为什么你需要它?

+1

以编程方式探索以独特方式识别viewControllers及其视图的不同方式。 .tag,.title,.accessibilityLabel,.nibName都可以正常工作。对象Ids我认为是(私人?),所以想知道Storyboard ID是否可以选择。 – Jalakoo

+1

也许你可以使用控制器类名称“生成”标识符 –

+0

我在项目中使用了40多个视图控制器,并且我无意为它们中的每一个设置一些新值以便于定位。恢复ID已经为我设置。 – vedrano

54

你可以使用恢复ID:

NSString *restorationId = self.restorationIdentifier; 

只需选中复选框“使用故事板ID”

+0

谢谢!奇迹般有效! – Genevios

+0

我越来越无 –

1

为返回的的UIViewController或UIView的的“ID”是最可靠的方法...

NSString *viewControllerName = [[NSString alloc] initWithString:viewController.nibName]; 

这将返回...... “29瓦特集成电路(IC)LNO - 视图 - FDU-OQ-UPZ”,其中 “29瓦特集成电路(IC)LNO” 是的UIViewController的对象ID和“FDU-OQ- UpZ“是UIView的对象ID。

但是,你也可以使用...

NSString *viewControllerName = [[NSString alloc] initWithString:viewController.title]; 

这将返回的UIViewController中的“标题”,在属性检查器;所以就像您将故事板ID添加到UIViewController一样简单,您也可以添加标题。

0

您可以与班级名称进行比较。 导入类,然后尝试。

NSArray *viewControllers = self.navigationController.viewControllers; 
UIViewController *root = [viewControllers objectAtIndex:0]; 
if ([root isKindOfClass:[UserLogin class]]) { 
//--- do --- 
} 
5

您也可以尝试做这样的事情: -

NSString *restorationId = [viewController valueForKey:@"storyboardIdentifier"]; 

这恰恰给你,你已经通过界面生成器设置故事板标识。

相关问题