繁体   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