2012-10-16 77 views
0

我有一個主要由兩個視圖組成的iPhone應用程序,我們稱它們爲fullScreencardViewscardViews顯示爲全屏視圖的子視圖)。我已經通過擁有masterCardViewClassmasterFullScreenViewClass來呈現卡片視圖中的所有動畫。所有特定的cardView都是masterCardView的子類,所有特定的fullScreenView都是masterFullScreenView的子類。從子類調用視圖

我使用masterFullScreenViewClass中的方法呈現cardView。我使用masterCardView中的委託方法解僱了cardView。但是,我在調用方法從另一個cardView呈現cardView時遇到問題。所有cardView呈現方法都包含在masterFullScreenViewController類中。

如何在不需要複製粘貼到需要它們的地方的情況下訪問這些方法。

回答

1

這樣做的一種方法是使用協議。

簡而言之,您masterCardView class將實施呈現一個cardView協議方法(爲簡單起見,讓我們說,你調用具有一定的指數cardViews):

masterCardView.h:

@protocol CardPresenterDelegate <NSObject> 

- (void)presentCardViewWithIndex:(int)index; 

@end 

@interface MasterCardView:UIViewController <CardPresenterDelegate> 
... 

masterCardView.m:

- (void)presentCardViewWithIndex:(int)index 
{ 
// Code for presenting a cardView 
} 

你會還需要在cardView創建一個委託(弱)特性:通過訪問您的cardView,物業

cardView.h

@property (weak) id<CardPresenterDelegate> cardPresenterDelegate; 

然後,你可以告訴masterCardView到爲你做些什麼:

cardView.m

[self.cardPresenterDelegate presentCardViewWithIndex:5]; 

哦,不要忘了在masterCardView創建它們時設置你的cardViews委託屬性:

早在masterCardView.m:

cardView.cardPresenterDelegate = self;