Ответ 1
Вы можете использовать restoreIdentifier, это прямо над идентификатором Storyboard, и это свойство UIViewController.
Попытка выяснить, может ли UIViewController или UIView идентифицировать свой идентификатор раскадровки. Так надеялся на:
UIViewController *aViewController;
NSString *storyboardID = aViewController.storyboard.id; //not an actual property
или:
NSString *storyboardID = [aViewController.storyboard valueForKey:@"storyboardId"]; //also not a working call
Но не радостно и не смог найти аналогичное решение в сети. Кто-нибудь знает, возможно ли это вообще?
Вы можете использовать restoreIdentifier, это прямо над идентификатором Storyboard, и это свойство UIViewController.
Вы можете использовать идентификатор восстановления:
NSString *restorationId = self.restorationIdentifier;
Просто установите флажок "Использовать идентификатор раскадровки"
Идентификатор раскадровки предназначен только для поиска и создания экземпляра VC из раскадровки. Как написано в ссылке UIStoryboard:
"Этот идентификатор не является свойством самого объекта контроллера представления и используется только файлом раскадровки для поиска контроллера вида.
Зачем вам это нужно?
Вы также можете попробовать сделать что-то вроде этого: -
NSString *storyboardId = [viewController valueForKey:@"storyboardIdentifier"];
Это точно даст вам Storyboard Id, который вы установили через конструктор интерфейса.
Быстрое расширение:
extension UIViewController {
var storyboardId: String {
return value(forKey: "storyboardIdentifier") as? String
}
}
Самый надежный метод для возврата "id" UIViewController или UIView - это...
NSString *viewControllerName = [[NSString alloc] initWithString:viewController.nibName];
Это вернет... "29w-Ic-LNo-view-FDu-oq-UpZ", где "29w-Ic-LNo" - это идентификатор объекта UIViewController, а "FDu-oq-UpZ" - это Идентификатор объекта UIView.
Однако вы также можете использовать...
NSString *viewControllerName = [[NSString alloc] initWithString:viewController.title];
Это вернет "Заголовок" UIViewController в Инспекторе атрибутов; поэтому так же легко, как вы добавили идентификатор раскадровки в UIViewController, вы также можете добавить заголовок.
Вы можете сравнить с именем класса. import, а затем попробуйте.
NSArray *viewControllers = self.navigationController.viewControllers;
UIViewController *root = [viewControllers objectAtIndex:0];
if ([root isKindOfClass:[UserLogin class]]) {
//--- do ---
}