Програмно получаване на ID на Storyboard?

Опитвам се да видя дали UIViewController или UIView може да идентифицира своя Storyboard ID. Така че се надявах на:

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

or:

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

Но не беше радост и не можах да намеря подобно решение онлайн. Някой знае ли дали това изобщо е възможно?


person Jalakoo    schedule 04.12.2012    source източник
comment
Само една интересна точка, можете да използвате '[aViewController.storyboard valueForKey:@name];'. Другите отговори обаче са по-добри.   -  person Sam Clewlow    schedule 13.05.2015
comment
@Andy къде е storyboardIdentifier?   -  person ArgaPK    schedule 02.01.2018
comment
@ArgaPK преди много време имаше частна собственост, наречена storyboardIdentifier. Нямам представа дали все още е наличен, но можете да опитате да го направите с valueForKey.   -  person Ben Affleck    schedule 02.01.2018


Отговори (6)


Можете да използвате restorationIdentifier, той е точно над идентификатора на Storyboard и е свойство на UIViewController.

person Lolloz89    schedule 24.04.2013
comment
За всеки, който прави приложения или статични библиотеки за по-ранни версии на iOS, свойството restorationIdentifier е iOS 6.0+ - person Jalakoo; 10.12.2014
comment
Просто поставете отметка на Use Storyboard ID в Interface builder, за да използвате автоматично ID на Storyboard като свойството restorationIdentifier. Той ще бъде зададен динамично, без да се налага да го въвеждате два пъти. - person thgc; 17.12.2014
comment
Референцията на restorationIdentifier казва The value of this property is nil by default, which indicates that the view’s state does not need to be saved. Това означава, че настройката на restorationIdentifier на различно от нула има някакъв вид странични ефекти! - person ypresto; 25.11.2015

Можете да използвате ID за възстановяване:

NSString *restorationId = self.restorationIdentifier;

Просто поставете отметка в квадратчето „Използване на Storyboard ID“

person Erickson1    schedule 22.04.2014
comment
Благодаря! Работи като чар! - person Genevios; 02.05.2015
comment
получавам нула - person Mihir Oza; 28.04.2017

Идентификаторът на разкадровката е предназначен само за намиране и инстанциране на VC от разкадровка. Както е написано в препратката към UIStoryboard:

„Този ​​идентификатор не е свойство на самия обект на контролера на изгледа и се използва само от файла на сценария за намиране на контролера на изгледа.“

защо ти трябва

person LombaX    schedule 04.12.2012
comment
Проучване на различни начини за уникално програмно идентифициране на viewControllers и техните изгледи. .tag, .title, .accessibilityLabel, .nibName всички работят достатъчно добре. Идентификаторите на обекти, които смятам, че са излезли (частни?), така че се чудех дали идентификаторите на Storyboard изобщо са опция. - person Jalakoo; 04.12.2012
comment
Може би можете да генерирате идентификатора, като използвате името на класа на контролера - person ıɾuǝʞ; 19.08.2013
comment
Използвам повече от 40 контролера за изглед в проекта и нямам намерение да задавам нова стойност на всеки от тях, само за да мога да го намеря. ID за възстановяване вече е настроен за мен. - person vedrano; 15.07.2014
comment
Apple добави квадратчето за отметка Use Storyboard ID за идентификатора Restoration в Interface Builder. Те очевидно направиха това, за да улеснят нас, разработчиците, да използваме идентификатора на сценария в кода. - person thgc; 17.12.2014
comment
Може да използва един файл с код на контролер и множество ViewController. - person Mohammad Zaid Pathan; 12.03.2016

Можете също да опитате да направите нещо подобно: -

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

Това точно ще ви даде идентификатора на Storyboard, който сте задали чрез създателя на интерфейса.

Бързо разширение:

extension UIViewController {
    var storyboardId: String { 
        return value(forKey: "storyboardIdentifier") as? String
    }
}
person Apple_iOS0304    schedule 15.11.2016
comment
Това беше много полезно. Точно това, което търсих. Благодаря! - person Phontaine Judd; 10.09.2019

Най-надеждният метод за връщане на "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 в инспектора на атрибутите; така че също толкова лесно, колкото сте добавили Storyboard ID към UIViewController, можете също да добавите заглавие.

person serge-k    schedule 12.10.2014

Можете да сравните с името на класа. импортирайте клас и след това опитайте.

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