以编程方式获取故事板ID?

时间:2012-12-04 17:36:06

标签: ios objective-c xcode storyboard identity

尝试查看UIViewController或UIView是否可以识别其Storyboard ID。所以希望:

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

或:

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

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

6 个答案:

答案 0 :(得分:90)

您可以使用restorationIdentifier,它位于Storyboard标识符的正上方,它是一个UIViewController属性。

答案 1 :(得分:57)

您可以使用恢复ID:

NSString *restorationId = self.restorationIdentifier;

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

答案 2 :(得分:21)

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

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

为什么需要它?

答案 3 :(得分:5)

您也可以尝试这样做: -

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

这将准确地为您提供通过界面构建​​器设置的Storyboard ID。

答案 4 :(得分:1)

返回" id"最可靠的方法UIViewController或UIView是......

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

这将返回......" 29w-Ic-LNo-view-FDu-oq-UpZ",其中" 29w-Ic-LNo"是UIViewController的对象ID和" FDu-oq-UpZ"是UIView的对象ID。

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

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

这将返回"标题"属性检查器中的UIViewController;所以就像你将故事板ID添加到UIViewController一样容易,你也可以添加一个标题。

答案 5 :(得分:0)

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

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