2012-10-26 49 views
3

我有一個AnimalViewController。它是一個基本的視圖控制器。我還有UIStoryBoard中的AnimalViewController場景。UIStoryboard和繼承

我有一個關於繼承的問題。

@interface BearViewController : AnimalViewController 
@interface LionViewController : AnimalViewController 

是否有可能使用AnimalViewController Scene實例化BearViewController?

PS BearViewController和LionViewController具有與AnimalViewController相同的接口。

回答

2

解決方案是使用xib代替故事板。

BearViewController *bearVC = [[BearViewController alloc] initWithNibName:@"Animal" bundle:nil]; 
LionViewController *lionVC = [[LionViewController alloc] initWithNibName:@"Animal" bundle:nil]; 
+0

[策略模式是解決此問題的另一種方法。](http://stackoverflow.com/a/17381927/419348) – AechoLiu

-1

你,你可以做以下的,但我不認爲故事板被設計成做這樣的事情,你仍然會爲剛澆鑄subclass所以基本上你將一無所獲(除了不同的指針類型)AnimalViewController對象並獲取運行時崩潰當您調用任何BearViewController定義的方法:

BearViewController *bearViewController = [storyboard instantiateViewControllerWithIdentifier:@"AnimalViewController"]; 

[[self navigationController] pushViewController:bearViewController animated:YES]; 
+0

該轉換不會更改實際的運行時對象。它只是告訴編譯器「信任你」......在運行時返回的對象將是一個BearViewController。如果場景配置爲AnimalViewController,那麼將在運行時返回...因此,您編寫的代碼不會實例化BearViewController。 –

+0

這正是我的意思......除了不同的指針類型,它不會給你任何東西。 –

+0

問題是關於如何實例化BearViewController。這個答案沒有解決這個問題。 – Eric