我有一个主要由两个视图组成的iPhone应用程序,我们称之为fullScreen
和cardViews
(cardViews
显示为全屏视图的子视图)。我通过masterCardViewClass
和masterFullScreenViewClass
来处理卡片视图中的所有动画。所有特定的cardView都是masterCardView的子类,所有特定的fullScreenView都是masterFullScreenView的子类。
我使用masterFullScreenViewClass
中的方法呈现cardView。我使用masterCardView中的委托方法解除了cardView。但是,我在调用一种方法从另一个cardView呈现cardView时遇到问题。所有cardView呈现方法都包含在masterFullScreenViewController类中。
如何在不将我们需要的地方粘贴到本地的情况下访问这些方法。
答案 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;