如何在 iOS 中使用委派来滑出菜单?
Posted
技术标签:
【中文标题】如何在 iOS 中使用委派来滑出菜单?【英文标题】:How do I use delegation in iOS for slide out menu? 【发布时间】:2015-03-09 02:29:49 【问题描述】:我正在尝试找出 ios 中的委派。基本上,我有classA
,其中包含methodA
。我也有classB
,我想将其称为methodA
。
具体来说,我有一个名为ViewControllerRootHome
的类和一个名为ViewControllerRootHomeLeftPanel
的类。 ViewControllerRootHome
中有一个名为 movePanelToOriginalPosition
的方法,我想从 ViewControllerRootHomeLeftPanel
类中调用此方法。
任何帮助将不胜感激。哦忘了说我还在用 Objective-C 来做这个项目。
【问题讨论】:
【参考方案1】:我会尝试一下。
假设您有一个名为 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
好的,现在您已经定义了一个名为 myProtocol 的协议,您希望在 ViewControllerA
中使用它让我们在那里使用它。我们将不得不做几件事:一,遵守协议。第二,将我们当前的 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 设置为 delegate:
self.ViewControllerB.myDelegate = self;
现在,您所要做的就是从 ViewController A 内部的协议中定义方法,以便可以调用它:
-(void)doSomething
...
这就是你需要做的。但是,请注意如果您有两个遵守彼此协议的 ViewController,您可能必须在各自的头文件中声明协议。
编辑:如何调用方法。 如果要调用协议内部定义的方法。您将在 ViewControllerB 中执行此操作,如下所示:
if ([self.myDelegate respondsToSelector:@selector(doSomething)])
[self.myDelegate doSomething];
【讨论】:
以上是关于如何在 iOS 中使用委派来滑出菜单?的主要内容,如果未能解决你的问题,请参考以下文章
如何修改 PKRevealController 滑出菜单以处理 iOS 7?