How to use custom delegates in Objective-C
我需要知道Objective-C中委托方法的用法。有人能给我指出正确的来源吗?
您将要为类声明委托协议。一个代表类EDCOX1(4)的委托协议和接口的例子可能是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @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 |
别忘了在
此代码所做的是声明一个名为foodelegate的协议;符合此协议的类将像
1 2 | Foo *obj = [[Foo alloc] init]; [obj setDelegate:self]; |
现在,您的类准备接收来自
代理对于在应用程序中手动控制视图控制器数组内的传输非常有用。使用委托可以很好地管理控制流。
下面是自己的代表的一个小例子……
采样elegate.h
1 2 3 4 5 6 7 8 9 | #import @protocol SampleDelegate @optional #pragma Home Delegate -(NSString *)getViewName; @end |
同时在委托引用中添加上面的DelegateName<>
owndelegateappdelegate.h(W.ndelegateappdelegate.h)
1 2 3 4 5 6 7 | #import"SampleDelegate.h" @interface ownDelegateAppDelegate : NSObject <UIApplicationDelegate, SampleDelegate> { } |
owndelegateappdelegate.m
1 2 3 4 5 6 7 8 | //setDelegate of the HomeViewController's object as [homeViewControllerObject setDelegate:self]; //add this delegate method definition -(NSString *)getViewName { return @"Delegate Called"; } |
家庭视图控制器.h
1 2 3 4 5 6 7 8 9 10 11 12 | #import #import"SampleDelegate.h" @interface HomeViewController : UIViewController { id<SampleDelegate>delegate; } @property(readwrite , assign) id<SampleDelegate>delegate; @end |
家庭视图控制器.h
1 2 3 4 5 6 7 8 9 10 | - (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]; } |
如果问题对象的
这是你应该在第一对内幕和教程接触可可接触。像可可这个教程是我的女朋友。事实上,他们把EDCX1 0解释为一个大胆的标题。
首先,你可以看看苹果对委托方法的看法。文档提供了一些关于委托的书面信息,并解释了如何使用定义和支持委托的AppKit类,以及如何将委托支持编码为自己的对象之一。
请参见与对象通信
(如果您有兴趣对自己的委托支持进行编码,请跳到"为自定义类实现委托"部分。)
从委托方法中去掉的最重要的方面是,它们使您能够自定义和影响对象的行为,而无需对其进行子类化。
希望这能帮助你开始。