[英]How do I use delegation in iOS for slide out menu?
我試圖找出在iOS中的委派。 基本上,我有classA
其中包含methodA
。 我也有classB
我想調用methodA
的。
具體而言,我有一類叫做ViewControllerRootHome
和類稱為ViewControllerRootHomeLeftPanel
。 ViewControllerRootHome
有一個名為movePanelToOriginalPosition
的方法,我想從ViewControllerRootHomeLeftPanel
類中調用此方法。
任何幫助將不勝感激。 哦,忘了提及我在該項目中仍在使用Objective-C。
我會嘗試的。
假設您有一個名為ViewControllerA的ViewController和另一個名為ViewControllerB的ViewController 。 我們想從B調用A內部的方法。 我們將如何實現這一目標?
簡單。 我們將在B內部定義一個A會遵守的協議。 讓我在這里做。
#import ...
@protocol myProtocol; // Declare Protocol
@interface ViewControllerB : UIViewController
@property (nonatomic, weak)id <myProtocol> myDelegate; // Create Delegate property
@end // Notice this is AFTER the @end of the @interface declaration
@protocol myProtocol <NSObject> // Define Protocol
-(void)doSomething;
@end
好的,現在您已經定義了一個希望在ViewControllerA中使用的協議myProtocol
讓我們在那里使用它。 我們將不得不做幾件事:一,遵守協議。 第二,將當前的VC設置為委托!
#import ...
#import "ViewControllerB" // IMPORT the VC with the Protocol
@interface ViewControllerA : UIViewController <myProtocol> // Conform to Protocl
@property (nonatomic)ViewControllerB *viewControllerB;
@end
注意,我已經定義了ViewControllerB類型的屬性。 您將需要以某種形狀或形式引用ViewControllerB。 這通常很容易實現,因為通常是從ViewControllerA創建ViewControllerB的實例。 否則,將需要在外部進行設置或在初始化時將其傳遞給ViewControllerA,然后在此處將其設置為屬性。
在ViewControllerA.m中,將ViewControllerA設置為委托 :
self.ViewControllerB.myDelegate = self;
現在,您所要做的就是從ViewController A內部的協議中定義方法,以便可以將其調用:
-(void)doSomething
{
...
}
這就是您需要做的。 但是,請注意, 如果您有兩個遵守彼此協議的ViewController ,則可能必須在其自己的頭文件中聲明協議。
編輯:如何調用該方法。 如果要調用協議內部定義的方法。 您將在ViewControllerB中這樣做,如下所示:
if ([self.myDelegate respondsToSelector:@selector(doSomething)])
{
[self.myDelegate doSomething];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.