2013-03-19 14 views
7

我寫返回一個視圖控制器實例爲給定的視圖控制器類的方法,但我需要確保在傳遞的類實際上是一個視圖控制器類:iOS:如何檢查給定的類是一種UIViewController類?

- (UIViewController *)viewControllerWithClass:(Class)cls nibName:(NSString *)nibName 
{ 
    if (cls is kind of UIViewController subclass) 
     return [[[cls alloc] initWithNibNamed:nibName bundle:nil] autorelease]; 
    return nil; 
} 

我不能比較的名字從cls開始的類可能不是UIViewController。

編輯:

對不起,我的意思的方法,裏面我該如何檢查是否cls是一種UIViewController子類

回答

24
if ([cls isSubclassOfClass:[UIViewController class]]) { 


    //Your code 

} 
+4

由於這是公認的答案我只是想澄清,所有使用isKindOfClass方法,其他的答案是錯誤的,isKindOfClass不與型「類」對象的工作(如CLS在這例如),[[CDMyClass class] isKindOfClass:[CDMyClass class]]也返回NO [CDMyClass isKindOfClass:[CDMyClass class]]返回NO。爲了使用類型爲Class的接收器,您應該使用isSubclassOfClass – LightMan 2014-09-15 15:56:26

1

您可以使用下面的代碼。

if ([cls isKindOfClass:[UIViewController class]]) { 
    //your code 
} 
0

如果有要被測試表示所述目標C類的類對象,然後使用+ (BOOL)isSubclassOfClass:(Class)aClass它返回一個布爾值,指示接收器是否是給定的類的一個實例或從繼承的任何類的實例那個班。 (必需)

if([cls isKindOfClass:[UIViewController class]]) 
{ 
} 

EDIT

如果你有一個類對象,其是-或子類相同類進行測試,然後使用+ (BOOL)isSubclassOfClass:(Class)aClass它返回一個布爾值,它指示是否接收類是給定類的一個子類或完全相同。

if([cls isSubclassOfClass:[UIViewController class]]) 
{ 
} 
0
// Check This out 
if([youViewControllerObject isKindOfClass:[UIViewController class]]) 
{ 
    NSLog(@"isViewcontroller Class"); 
} 
0

這個答案來得晚了一點,但因爲要檢查的類類對象(不是一個類的實例),以下是合適的測試:

+0

否,他們不想檢查它確切是'UIViewController',他們想知道它是否是'UIViewController'或其子類 – newacct 2014-08-28 22:49:35

相關問題