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

试图看看 UIViewController 或 UIView 是否能识别它的故事板 ID:

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

或:

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

但是没有乐趣,在网上也找不到类似的解决方案。有人知道这是否可行吗?

45723 次浏览

故事板 id 只是用来从故事板中找到并实例化一个 VC。 正如 UIStoryboard 参考文献中所写:

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

你要它干什么?

您可以使用恢复标识符,它就在 Storyboard 标识符的正上方,它是一个 UIViewController 属性。

你可使用修复号码:

NSString *restorationId = self.restorationIdentifier;

只要勾选“使用故事板 ID”复选框

返回 UIViewController 或 UIView 的“ id”的最可靠的方法是..。

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 的“ Title”; 因此,就像您将故事板 ID 添加到 UIViewController 一样,您也可以添加一个 Title。

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

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

你也可以尝试这样做:-

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

这将精确地给出您通过 Interface Builder 设置的情节串联 ID。

快速扩展:

extension UIViewController {
var storyboardId: String {
return value(forKey: "storyboardIdentifier") as? String
}
}