动态创建子类iphone

时间:2011-04-19 07:29:51

标签: iphone objective-c ipad dynamic subclass

我正在创建一些通用类。

我创建了三个视图控制器并创建了一个枚举

typedef enum Type {
    type1,
    type2,
    type3,
} Type;

并且对于三种不同的类型我需要使用不同的视图控制器子类。 但用户感觉就像一个人。 (我的意思是我可以在该接口类中提供一个接口,我们需要决定使用哪个控制器)。

我试试这样, 我创建一个类并覆盖init方法,如下所示,

- (id)initWithReaderType:(ReaderType )readerType    {

        switch (readerType) {
            case 0: {
                Slider *slider = [[Slider alloc] init];
                return slider;
            }
            case 1: {
                //use other controller
                break;
            }
            default:    {
                NSLog(@"Exception on Initialization : Un Recognized Reader Type");
                break;
            }
        }

    return nil;
}

但它作为id对象返回,所以我不能将它用作视图控制器对象,并且我无法访问该控制器类的属性和方法。

我如何实现这一目标?

提前感谢....

2 个答案:

答案 0 :(得分:1)

您可以将id(指针)强制转换为UIViewController(或其任何子类)。

id result = [self initWithReaderType:type1];
// Check if we can cast.
if ([result isKindOfClass[UIViewController class]]) {
   UIViewController *viewController = (UIViewController *)[self initWithReaderType:type1];
}

您可以将UIViewController更改为您自己的类。

答案 1 :(得分:0)

我认为你可以投射到你想要的类型。例如:

Slider *incomeSlider = (Slider *)[self initWithReaderType:type1];

你可以这样试试。