如何在Objective-C中使用自定义委托

我需要知道在Objective-C中委托方法的用法。 任何人都可以指出我的来源?

您将需要为您的class级声明一个委托协议。 类Foo的委托协议和接口的示例可能如下所示:

 @class Foo; @protocol FooDelegate <NSObject> @optional - (BOOL)foo:(Foo *)foo willDoSomethingAnimated:(BOOL)flag; - (void)foo:(Foo *)foo didDoSomethingAnimated:(BOOL)flag; @end @interface Foo : NSObject { NSString *bar; id <FooDelegate> delegate; } @property (nonatomic, retain) NSString *bar; @property (nonatomic, assign) id <FooDelegate> delegate; - (void)someAction; @end 

不要忘记在@implementation综合你的属性。

这段代码做的是声明一个名为FooDelegate的协议; 一个符合这个协议的类将被声明为@interface SomeClass : SuperClass <FooDelegate> {} 。 因为这个类符合协议FooDelegate ,现在它实现了FooDelegate下的方法(要求实现这些方法,使用@required而不是@optional )。 最后一步是在符合FooDelegate的类中实例化Foo对象,并为此Foo对象设置其委托属性:

 Foo *obj = [[Foo alloc] init]; [obj setDelegate:self]; 

现在,你的类已经准备好接收来自Foo对象的代码正确设置的消息。

代表是非常有用的手动控制应用程序中的视图控制器数组中的传输。 使用委托可以很好地pipe理控制stream。

这里是自己的代表的小例子….

  1. 创build协议类….(仅限.h)

SampleDelegate.h

 #import @protocol SampleDelegate @optional #pragma Home Delegate -(NSString *)getViewName; @end 
  1. 导入上面的协议类中您想要使其他类的委托的类。 这里在我的前。 我使用AppDelegate作出的HomeViewController的对象的委托。

还要在Delegate Reference <>中添加上面的DelegateName

ownDelegateAppDelegate.h

 #import "SampleDelegate.h" @interface ownDelegateAppDelegate : NSObject <UIApplicationDelegate, SampleDelegate> { } 

ownDelegateAppDelegate.m

 //setDelegate of the HomeViewController's object as [homeViewControllerObject setDelegate:self]; //add this delegate method definition -(NSString *)getViewName { return @"Delegate Called"; } 

HomeViewController.h

 #import #import "SampleDelegate.h" @interface HomeViewController : UIViewController { id<SampleDelegate>delegate; } @property(readwrite , assign) id<SampleDelegate>delegate; @end 

HomeViewController.h

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; UILabel *lblTitle = [[UILabel alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; lblTitle.text = [delegate getViewName]; lblTitle.textAlignment = UITextAlignmentCenter; [self.view addSubview:lblTitle]; } 

如果有问题的对象已将其delegate分配给您编写的类,则称为controller那么为该对象的类的delegate方法定义的方法必须由指定的类实现。 这允许您有效地控制对象的行为,而无需对对象的类进行子分类,以覆盖可能需要大量重复行为的行为。 这是cocoa触摸devise的清洁部分之一。

这是你应该拿起第一两个介绍和教程cocoa触摸的东西。 像这个来自Cocoa的教程是我的女朋友 。 事实上,他们使delegate解释变成一个大胆的标题。

首先,您可以看一下苹果对委托方法的评价。 该文档提供了一些关于代表团的详细信息,并解释了如何使用定义和支持委托的AppKit类以及如何将委托支持编码到您自己的对象中。

请参阅与对象通信

(如果您有兴趣编写自己的代理支持,请跳至“为自定义类实现代理”部分。)

从委托方法中脱离出来的最重要的方面是,它们使您能够自定义和影响对象的行为,而无需对其进行子类化。

希望能帮助你开始。