Nice programing

프로그래밍 방식으로 스토리 보드 ID를 얻습니까?

nicepro 2020. 10. 28. 20:59
반응형

프로그래밍 방식으로 스토리 보드 ID를 얻습니까?


UIViewController 또는 UIView가 스토리 보드 ID를 식별 할 수 있는지 확인하려고합니다. 그래서 기대했습니다.

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 속성입니다.


복원 ID를 사용할 수 있습니다.

NSString *restorationId = self.restorationIdentifier;

'스토리 보드 ID 사용'확인란을 선택하세요.


스토리 보드 ID는 스토리 보드에서 VC를 찾고 인스턴스화하기위한 것입니다. UIStoryboard 참조에 쓰여진대로 :

"이 식별자는 뷰 컨트롤러 개체 자체의 속성이 아니며 스토리 보드 파일에서 뷰 컨트롤러를 찾는 데만 사용됩니다."

왜 필요합니까?


다음과 같이 시도 할 수도 있습니다.

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

이것은 인터페이스 빌더를 통해 설정 한 스토리 보드 ID를 정확하게 제공합니다.

Swift 확장 :

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

UIViewController 또는 UIView의 "id"를 반환하는 가장 신뢰할 수있는 방법은 다음과 같습니다.

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

"29w-Ic-LNo-view-FDu-oq-UpZ"가 반환됩니다. 여기서 "29w-Ic-LNo"는 UIViewController의 개체 ID이고 "FDu-oq-UpZ"는 개체 ID입니다. UIView.

그러나, 당신은 또한 사용할 수 있습니다 ...

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

그러면 Attributes Inspector에서 UIViewController의 "Title"이 반환됩니다. UIViewController에 Storyboard ID를 추가 한 것처럼 쉽게 제목을 추가 할 수도 있습니다.


클래스 이름과 비교할 수 있습니다. 클래스를 가져온 다음 시도하십시오.

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

참고 URL : https://stackoverflow.com/questions/13708660/programmatically-get-a-storyboard-id

반응형