2012-11-29 7 views
11

navigationControllerスタックのviewControllerを次のように取得しています。今私は上のコントローラが既知のVCの1つであるかどうかを確認する必要があります。どのようにそれを比較するには、VCクラス名を取得するには?ありがとうございました。iOSのUIViewControllerクラス名を取得

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

何かのように、

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

答えて

30

それはあなたが特定のクラスに直接インスタンスを比較することを好む場合にも-isKindOfClassを使用することができ

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

ねえ、ワーキング!素晴らしい、本当に感謝しています! – Jaume

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

をの助けがあり、これを使用します。

14

最も一般的な技術-isKindOfClassを使用することです:

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

文字列を比較するNSStringFromClassを使用して、あなたがそれを名前を変更するビューコントローラをリファクタリング場合は、あなたのコードが解除されますので、非常に素晴らしいソリューションではありません。

-1

スウィフトバージョン:

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

未解決の識別子_stdlib_getDemangledTypeName。 私はあなたがインポートする必要のあるライブラリを教えなければならないとも思います。 – Integer

関連する問題