web-dev-qa-db-fra.com

Obtenir par programme un ID de storyboard?

Essayer de voir si un UIViewController ou UIView peut identifier son ID de storyboard. J'espérais donc:

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

ou:

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

Mais pas de joie et je n'ai pas pu trouver une solution similaire en ligne. Est-ce que quelqu'un sait si c'est même possible?

70
Jalakoo

Vous pouvez utiliser la restaurationIdentifier, il est juste au-dessus de l'identifiant Storyboard et c'est une propriété UIViewController.

91
Lolloz89

Vous pouvez utiliser l'ID de restauration:

NSString *restorationId = self.restorationIdentifier;

Cochez simplement la case "Utiliser l'ID du storyboard"

57
Erickson1

L'ID du storyboard est uniquement destiné à rechercher et instancier un VC à partir d'un storyboard. Comme écrit dans la référence UIStoryboard:

"Cet identifiant n'est pas une propriété de l'objet contrôleur de vue lui-même et n'est utilisé que par le fichier de storyboard pour localiser le contrôleur de vue."

Pourquoi en avez-vous besoin?

21
LombaX

Vous pouvez également essayer de faire quelque chose comme ceci: -

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

Cela vous donnera précisément l'ID du storyboard que vous avez défini via le générateur d'interface.

6
Apple_iOS0304

La méthode la plus fiable pour renvoyer l '"id" de UIViewController ou UIView est ...

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

Cela retournera ... "29w-Ic-LNo-view-FDu-oq-UpZ", où "29w-Ic-LNo" est l'ID d'objet de l'UIViewController et "FDu-oq-UpZ" est l'ID d'objet de l'UIView.

Cependant, vous pouvez également utiliser ...

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

Cela renverra le "Titre" de l'UIViewController dans l'inspecteur d'attributs; donc aussi facilement que vous avez ajouté l'ID de storyboard à l'UIViewController, vous pouvez également ajouter un titre.

1
serge-k

Vous pouvez comparer avec le nom de la classe. importez la classe puis essayez.

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