从子类调用视图

时间:2012-10-16 22:14:50

标签: iphone uiviewcontroller delegates subview

我有一个主要由两个视图组成的iPhone应用程序,我们称之为fullScreencardViewscardViews显示为全屏视图的子视图)。我通过masterCardViewClassmasterFullScreenViewClass来处理卡片视图中的所有动画。所有特定的cardView都是masterCardView的子类,所有特定的fullScreenView都是masterFullScreenView的子类。

我使用masterFullScreenViewClass中的方法呈现cardView。我使用masterCardView中的委托方法解除了cardView。但是,我在调用一种方法从另一个cardView呈现cardView时遇到问题。所有cardView呈现方法都包含在masterFullScreenViewController类中。

如何在不将我们需要的地方粘贴到本地的情况下访问这些方法。

1 个答案:

答案 0 :(得分: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.h

@property (weak) id<CardPresenterDelegate> cardPresenterDelegate;

然后通过访问cardView中的该属性,您可以告诉masterCardView为您做点什么:

<强> cardView.m

[self.cardPresenterDelegate presentCardViewWithIndex:5];

哦,并且,在masterCardView中创建它们时,不要忘记在cardViews上设置委托属性:

返回 masterCardView.m:

cardView.cardPresenterDelegate = self;