编程方式获得一个Storyboard ID?(Programmatically get a Stor

2019-07-04 13:22发布

想看看是否一个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

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

Answer 1:

您可以使用restorationIdentifier,这是正确的故事板标识上面,它是一个UIViewController属性。



Answer 2:

你可以使用恢复ID:

NSString *restorationId = self.restorationIdentifier;

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



Answer 3:

故事板ID只是为了找到和故事板实例化一个VC。 至于写在UIStoryboard参考:

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

你为什么需要它?



Answer 4:

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

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

这恰恰给你的故事板的ID您通过界面生成器设置。



Answer 5:

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

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

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

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

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

这将返回在属性检查器的UIViewController的“标题”; 所以很容易为你添加故事板ID到的UIViewController,你也可以添加标题。



Answer 6:

您可以使用类名称进行比较。 进口类,然后尝试。

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


文章来源: Programmatically get a Storyboard ID?