2011-04-19 96 views
0

我正在創建一些泛型類。動態創建子類iphone

我創建三個視圖 - 控制器和我創建一個枚舉

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

和針對三個不同的I型需要使用不同的視圖控制器子類。 但用戶感覺像一個。 (我的意思是我可以在接口類中爲它提供一個我們需要決定使用哪個控制器的接口)。

我嘗試這樣, 我創建一個類,重載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對象,所以我不能用它作爲視圖 - 控制器對象,我無法訪問該控制器類的屬性和方法。

我該如何做到這一點?

在此先感謝....

回答

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更改爲您自己的類。

0

我認爲你可以轉換爲你想要的類型。例如:

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

您可以試試這種方式。