Programmatically get a Storyboard ID?
Solution 1
You can use the restorationIdentifier, it's right above the Storyboard identifier and it's a UIViewController property.
Solution 2
You can use the Restoration ID:
NSString *restorationId = self.restorationIdentifier;
Just check the checkbox 'Use Storyboard ID'
Solution 3
The storyboard id is only meant to find and instantiate a VC from a storyboard. As written in the UIStoryboard reference:
"This identifier is not a property of the view controller object itself and is only used by the storyboard file to locate the view controller."
Why do you need it?
Solution 4
You can also try doing something like this:-
NSString *storyboardId = [viewController valueForKey:@"storyboardIdentifier"];
This will precisely give you the Storyboard Id that you have set via interface builder.
Swift extension:
extension UIViewController {
var storyboardId: String {
return value(forKey: "storyboardIdentifier") as? String
}
}
Solution 5
The most reliable method for returning the "id" of the UIViewController or UIView is...
NSString *viewControllerName = [[NSString alloc] initWithString:viewController.nibName];
This will return... "29w-Ic-LNo-view-FDu-oq-UpZ", where "29w-Ic-LNo" is the Object ID of the UIViewController and "FDu-oq-UpZ" is the Object ID of the UIView.
However, you may also use...
NSString *viewControllerName = [[NSString alloc] initWithString:viewController.title];
This will return the "Title" of the UIViewController in the Attributes Inspector; so just as easily as you added the Storyboard ID to the UIViewController, you may also add a title.
Jalakoo
Updated on July 05, 2022Comments
-
Jalakoo almost 2 years
Trying to see if a UIViewController or UIView can identify its Storyboard ID. So was hoping for:
UIViewController *aViewController; NSString *storyboardID = aViewController.storyboard.id; //not an actual property
or:
NSString *storyboardID = [aViewController.storyboard valueForKey:@"storyboardId"]; //also not a working call
But no joy and couldn't find a similar solution online. Does anyone know if this is even possible?
-
Jalakoo over 11 yearsExploring different ways of uniquely identifying viewControllers and their views programmatically. .tag, .title, .accessibilityLabel, .nibName all work well enough. Object Ids I believe are out (private?), so was wondering if Storyboard Ids were at all an option.
-
ıɾuǝʞ almost 11 yearsMaybe you can "generate" the identifier using controller class name
-
vedrano almost 10 yearsI use more than 40 view controllers in project and I have no intent to set some new value to each of them just to be locatable. Restoration ID is set up already for me.
-
Jalakoo over 9 yearsFor anyone making apps or static libraries for earlier iOS versions, the restorationIdentifier property is iOS 6.0+
-
thgc over 9 yearsApple added the "Use Storyboard ID" checkbox for the Restoration identifier in the Interface Builder. They obviously did that to make it easier for us developers to use the storyboard identifier in code.
-
thgc over 9 yearsJust tick "Use Storyboard ID" in Interface builder to automatically use the storyboard ID as the restorationIdentifier property. It will be set dynamically without you having to type it twice.
-
Genevios about 9 yearsThanks! Works like a charm!
-
ypresto over 8 yearsReference of restorationIdentifier says
The value of this property is nil by default, which indicates that the view’s state does not need to be saved
. This means setting restorationIdentifier to other than nil has some kind of side effects! -
Mohammad Zaid Pathan about 8 yearsMay be using one controller code file and multiple ViewController.
-
Mihir Oza about 7 yearsi am getting nil
-
Phontaine Judd over 4 yearsThis was very helpful. Just what I was looking for. Thanks!