如何在iOS中使用委托滑出菜单?

时间:2015-03-09 02:29:50

标签: ios objective-c iphone ios7

我想在iOS中找出委托。基本上,我的classA包含methodA。我还有classB我想从methodA致电。{/ p>

具体来说,我有一个名为ViewControllerRootHome的班级和名为ViewControllerRootHomeLeftPanel的班级。 ViewControllerRootHome中有一个名为movePanelToOriginalPosition的方法,我想从ViewControllerRootHomeLeftPanel类中调用此方法。

非常感谢任何帮助。哦,我忘了提到我还在为项目使用Objective-C。

1 个答案:

答案 0 :(得分:4)

我会试一试。

假设您有一个名为 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设置为委托

self.ViewControllerB.myDelegate = self;

现在,您所要做的就是从ViewController A中的协议定义方法,以便可以调用它:

-(void)doSomething
{
...
}

这就是你需要做的。但是,请注意如果您有两个ViewControllers符合彼此的协议,您可能必须在自己的头文件中声明协议。

编辑:如何调用该方法。 如果要调用协议内定义的方法。您将在ViewControllerB中执行此操作,如下所示:

    if ([self.myDelegate respondsToSelector:@selector(doSomething)])
    {
        [self.myDelegate doSomething];
    }