74

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

しかし、喜びはなく、オンラインで同様の解決策を見つけることができませんでした. これが可能かどうかは誰にもわかりますか?

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リファレンスに書かれているように:

「この識別子は、View Controllerオブジェクト自体のプロパティではなく、ViewControllerを見つけるためにストーリーボードファイルによってのみ使用されます。」

なぜあなたはそれが必要なのですか?

于 2012-12-04T17:48:14.340 に答える
12

次のようなことを試すこともできます:-

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

これにより、インターフェイス ビルダーを介して設定した Storyboard 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" は UIViewController のオブジェクト ID です。 UI ビュー。

ただし、使用することもできます...

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

これにより、属性インスペクターで UIViewController の「タイトル」が返されます。Storyboard ID を UIViewController に追加したのと同じくらい簡単に、タイトルを追加することもできます。

于 2014-10-12T00:10:06.503 に答える
0

クラス名と比較できます。クラスをインポートしてから試してください。

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