簡體   English   中英

如何在iOS中使用委派的滑出菜單?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM