75 votes

Obtenir programmatiquement un ID de Storyboard ?

Essayer de voir si un UIViewController ou UIView peut identifier son ID Storyboard. Donc j'espérais :

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

ou :

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

Mais aucune joie et je n'ai pas trouvé de solution similaire en ligne. Quelqu'un sait-il si cela est possible ?

1 votes

À titre d'information, vous pouvez utiliser '[aViewController.storyboard valueForKey:@"name"];'. Les autres réponses sont cependant meilleures.

0 votes

C'est storyboardIdentifier .

0 votes

@Andy où est storyboardIdentifier ?

94voto

Lolloz89 Points 929

Vous pouvez utiliser l'identifiant de restauration, il se trouve juste au-dessus de l'identifiant du Storyboard et c'est une propriété UIViewController.

0 votes

Pour tous ceux qui créent des applications ou des bibliothèques statiques pour des versions antérieures d'iOS, la propriété restorationIdentifier est iOS 6.0+.

7 votes

Il suffit de cocher "Use Storyboard ID" dans le constructeur d'interface pour utiliser automatiquement l'ID du storyboard comme propriété restorationIdentifier. Il sera défini dynamiquement sans que vous ayez à le taper deux fois.

4 votes

Référence de restorationIdentifier dit The value of this property is nil by default, which indicates that the view’s state does not need to be saved . Cela signifie que le fait de donner à restorationIdentifier une valeur autre que nil a des effets secondaires !

61voto

Erickson1 Points 101

Vous pouvez utiliser l'ID de restauration :

NSString *restorationId = self.restorationIdentifier;

Il suffit de cocher la case "Utiliser l'ID du Storyboard".

0 votes

Merci ! Ça marche comme sur des roulettes !

2 votes

Je n'obtiens rien

21voto

LombaX Points 7697

L'identifiant du storyboard est uniquement destiné à trouver 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 est uniquement utilisé par le fichier storyboard pour localiser le contrôleur de vue."

Pourquoi en avez-vous besoin ?

1 votes

Exploration de différentes manières d'identifier de façon unique les viewControllers et leurs vues par voie programmatique. .tag, .title, .accessibilityLabel, .nibName fonctionnent tous assez bien. Je crois que les identifiants d'objet ne sont pas disponibles (privés ?), alors je me demandais si les identifiants de storyboard étaient une option.

1 votes

Vous pouvez peut-être "générer" l'identifiant en utilisant le nom de la classe du contrôleur.

0 votes

J'utilise plus de 40 contrôleurs de vue dans un projet et je n'ai pas l'intention de définir une nouvelle valeur pour chacun d'entre eux, juste pour être localisable. L'ID de restauration est déjà configuré pour moi.

14voto

Apple_iOS0304 Points 492

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

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

Cela vous donnera précisément l'Id du Storyboard que vous avez défini via le constructeur d'interface.

Extension rapide :

extension UIViewController {
    var storyboardId: String { 
        return value(forKey: "storyboardIdentifier") as? String
    }
}

0 votes

Cela a été très utile. Juste ce que je cherchais. Merci.

1voto

serge-k Points 173

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

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

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

Cependant, vous pouvez également utiliser...

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

Cela renverra le "Titre" du UIViewController dans l'inspecteur des attributs ; ainsi, tout comme vous avez ajouté l'ID du Storyboard au UIViewController, vous pouvez également ajouter un titre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X