如何在 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?

如何在目标 c 中使用 XIB 在登录视图后创建滑出菜单

如何让 UIView / Menu 滑入和滑出? (使用 C# 而不是 Swift 的 Xamarin IOS)

在导航控制器中实现滑出菜单时在哪里以及如何设置协议委托?

如何防止用户从滑出设置菜单中连续两次调用同一个视图控制器?

html 如何使用CSS转换创建垂直滑出菜单