2011-04-11 81 views
0

我正在爲我的應用程序的每個受支持的方向創建2個視圖控制器和2個筆尖 - 肖像和景觀按照apple的推薦。繼承支持視圖控制器和筆尖

問題是,我將有負載的重複代碼 - 繼承工作在界面生成器?

即我可以在基類中聲明一個iboutlet標籤並將它用於兩個nib?編輯:我有2個控制器,都從基礎控制器繼承。我可以讓我的IBactions和IBOutlets以及數組和tableview委託代碼放在底座中,然後將它與2個不同的鳥嘴連接起來嗎?我試圖擺脫一些重複問題

回答

1

問:我可以在基類中聲明iboutlet標籤並將它用於兩個nib嗎?

答:是的,它會工作,使用initWithNibName初始化控制器與所需的Nib(xib)。

+0

您是否可以在我上次編輯後更新您的答案(如果有任何更改)。我只是想在我走下這條路線之前確定 - 如果它有效,它會爲我節省很多時間! – TheLearner 2011-04-11 14:16:21

+0

@thelearner是的,這是可能的。你可以嘗試一個簡單的1 IBOutlet,它應該需要3分鐘:) – 2011-04-11 16:45:04

+0

@inovation - 只是爲了讓你知道,這是行不通的,因爲當孩子類調用super dealloc時,它釋放所有的出口和控制,其他孩子可能需要。看到這個問題:http://tinyurl.com/3m5nh75 – TheLearner 2011-04-12 17:56:01

0

我剛剛發佈here,但我認爲你也可以從中受益。

我知道這是一個古老的線程,但我只是發現了一個令人難以置信的博客文章here

本質上,您必須遍歷父類的所有視圖,並將它們作爲子視圖添加到您的子類。這裏是我是如何實現它在我的項目:

// ChildViewController.m 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self addSubviewsFromSuperclass]; 
} 

// ParentViewController.h 
- (void)addSubviewsFromSuperclass; 

// ParentViewController.m 
- (void)addSubviewsFromSuperclass 
{ 
    UIView *selfView = self.view; 
    UIView *nibView = nil; 
    @try 
    { 
     nibView = [NSBundle.mainBundle loadNibNamed:NSStringFromClass([self superclass]) owner:self options:nil][0]; 
    } 
    @catch (NSException *exception) 
    { 
     NSLog(@"Something exceptional happened while loading nib:\n%@", exception); 
    } 
    self.view = selfView; 
    for (UIView *view in nibView.subviews) 
    { 
     [self.view addSubview:view]; 
    } 
} 

addSuviewsFromSuperclass方法是不是我的編碼。我必須完全讚賞上面提到的博客作者。下載他的示例項目,你會在他的JMViewController.m中找到它。