74

尝试查看 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

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

4

6 回答 6

95

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

于 2013-04-24T17:00:40.880 回答
61

您可以使用恢复 ID:

NSString *restorationId = self.restorationIdentifier;

只需选中“使用情节提要 ID”复选框

于 2014-04-22T20:27:23.483 回答
21

故事板 id 仅用于从故事板中查找和实例化 VC。如 UIStoryboard 参考中所写:

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

你为什么需要它?

于 2012-12-04T17:48:14.340 回答
12

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

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

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

快速扩展:

extension UIViewController {
    var storyboardId: String { 
        return value(forKey: "storyboardIdentifier") as? String
    }
}
于 2016-11-15T14:18:52.670 回答
1

返回 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”是对象 ID界面视图。

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

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

这将在属性检查器中返回 UIViewController 的“标题”;因此,就像您将 Storyboard ID 添加到 UIViewController 一样容易,您也可以添加标题。

于 2014-10-12T00:10:06.503 回答
0

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

NSArray *viewControllers = self.navigationController.viewControllers;
UIViewController *root = [viewControllers objectAtIndex:0];
if ([root isKindOfClass:[UserLogin class]]) {
//--- do ---
}
于 2016-06-20T09:31:48.147 回答