我正在创建一些通用类。
我创建了三个视图控制器并创建了一个枚举
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对象返回,所以我不能将它用作视图控制器对象,并且我无法访问该控制器类的属性和方法。
我如何实现这一目标?
提前感谢....
答案 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];
你可以这样试试。