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