2012-11-29 3 views
11

navigationController 스택에서 viewController를 다음과 같이 얻고 있습니다. 이제 정상에 컨트롤러가 알려진 된 vc 중 하나인지 확인해야합니다. 그것을 비교하기 위해 vc 클래스 이름을 얻는 방법? 고맙습니다. 특정 클래스에 직접 인스턴스를 비교하는 것을 선호하는 경우가iOS에서 UIViewController 클래스 이름 얻기

NSString *CurrentSelectedCViewController = NSStringFromClass([[((UINavigationController *)viewController1) visibleViewController] class]); 

답변

30

사용이입니다 .

+0

헤이, 작업! 위대하고 정말로 감사합니다! – Jaume

4
if ([NSStringFromClass([[viewContrlls lastObject] class]) isEqualToString: @"Whatever"]){ 
} 

또한 -isKindOfClass을 사용할 수 있습니다 그것은 도움이 될 수

NSArray *viewContrlls=[[self navController] viewControllers]; 
[viewContrlls lastObject] 

뭔가 같은

if ([[viewContrlls lastObject] name] isEqualToString @"viewControllerName"){ 
14

가장 일반적인 방법은 -isKindOfClass을 사용하는 것입니다 : 당신이 그것을 이름을 바꿀 뷰 컨트롤러를 리팩토링 경우 코드가 침입하기 때문에 문자열을 비교하는 NSStringFromClass를 사용

if ([[viewContrells lastObject] isKindOfClass:MyViewController.class]]) { 
    // ... 
} 

가 아주 좋은 해결책이 아니다.

-1

스위프트 버전 :

static func getClassNameAsString(className: AnyObject) -> String { 
    return _stdlib_getDemangledTypeName(className).componentsSeparatedByString(".").last! 
} 
+0

해결되지 않은 식별자 _stdlib_getDemangledTypeName. 나는 우리가 가져올 라이브러리를 말해야한다고 생각한다. – Integer