7

我正在编写一个返回给定视图控制器类的视图控制器实例的方法,但我需要确保传入的类实际上是一个视图控制器类:

- (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 子类

4

5 回答 5

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


   //Your code

}  
于 2013-03-19T06:38:55.143 回答
1

您可以使用以下代码。

if ([cls isKindOfClass:[UIViewController class]]) {
    //your code
}
于 2013-03-19T06:34:30.797 回答
0

如果您有一个表示要测试的 Objective-C 类的类对象,则使用+ (BOOL)isSubclassOfClass:(Class)aClass它返回一个布尔值,该值指示接收器是给定类的实例还是从该类继承的任何类的实例。(必需的)

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

编辑

如果您有一个类对象,它是要测试的类的子类或相同,则使用+ (BOOL)isSubclassOfClass:(Class)aClass它返回一个布尔值,指示接收类是给定类的子类还是相同。

if([cls isSubclassOfClass:[UIViewController class]])
{
}
于 2013-03-19T06:35:44.597 回答
0
// Check This out
if([youViewControllerObject isKindOfClass:[UIViewController class]])
{
    NSLog(@"isViewcontroller Class");
}
于 2013-03-21T04:44:52.583 回答
0

这个答案来得有点晚,但是由于您要检查类对象的类(而不是类的实例),因此以下是适当的测试:

if(cls == [UIViewController class]) {
   // Whatever ...
}
于 2014-08-28T18:26:04.843 回答