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
しかし、喜びはなく、同様のソリューションをオンラインで見つけることができませんでした。これが可能かどうかは誰にもわかりますか?
RecoveryIdentifierを使用できます。これはStoryboard識別子のすぐ上にあり、UIViewControllerプロパティです。
復元IDを使用できます。
NSString *restorationId = self.restorationIdentifier;
[ストーリーボードIDを使用]チェックボックスをオンにするだけです
ストーリーボードIDは、ストーリーボードからVCを検索してインスタンス化することのみを目的としています。UIStoryboardリファレンスに記載されているとおり:
「この識別子は、View Controllerオブジェクト自体のプロパティではなく、ストーリーボードファイルがView Controllerを見つけるためにのみ使用されます。」
なぜあなたはそれが必要なのですか?
次のようなことも試してみてください:-
NSString *restorationId = [viewController valueForKey:@"storyboardIdentifier"];
これにより、インターフェイスビルダーで設定したストーリーボード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。
ただし、使用することもできます...
NSString *viewControllerName = [[NSString alloc] initWithString:viewController.title];
これにより、属性インスペクターでUIViewControllerの「タイトル」が返されます。ストーリーボードIDをUIViewControllerに追加したのと同じくらい簡単に、タイトルを追加することもできます。
クラス名と比較できます。クラスをインポートしてから試してください。
NSArray *viewControllers = self.navigationController.viewControllers;
UIViewController *root = [viewControllers objectAtIndex:0];
if ([root isKindOfClass:[UserLogin class]]) {
//--- do ---
}