如何在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。
这里是自己的代表的小例子….
- 创build协议类….(仅限.h)
SampleDelegate.h
#import @protocol SampleDelegate @optional #pragma Home Delegate -(NSString *)getViewName; @end
- 导入上面的协议类中您想要使其他类的委托的类。 这里在我的前。 我使用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类以及如何将委托支持编码到您自己的对象中。
请参阅与对象通信
(如果您有兴趣编写自己的代理支持,请跳至“为自定义类实现代理”部分。)
从委托方法中脱离出来的最重要的方面是,它们使您能够自定义和影响对象的行为,而无需对其进行子类化。
希望能帮助你开始。