我想在iOS中找出委托。基本上,我的classA
包含methodA
。我还有classB
我想从methodA
致电。{/ p>
具体来说,我有一个名为ViewControllerRootHome
的班级和名为ViewControllerRootHomeLeftPanel
的班级。 ViewControllerRootHome
中有一个名为movePanelToOriginalPosition
的方法,我想从ViewControllerRootHomeLeftPanel
类中调用此方法。
非常感谢任何帮助。哦,我忘了提到我还在为项目使用Objective-C。
答案 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];
}