如何在 Objective-C 中使用自定义委托 [英] How to use custom delegates in Objective-C
问题描述
我需要了解Objective-C中委托方法的使用.谁能指出我正确的来源?
I need to know about the usage of delegate methods in Objective-C. Can anyone point me to the correct source?
推荐答案
你需要为你的类声明一个委托协议.类 Foo
的委托协议和接口的示例可能如下所示:
You will want to declare a delegate protocol for your class. An example of a delegate protocol and interface for class Foo
might look like this:
@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
中综合你的属性.
Don't forget to synthesize your properties in the @implementation
.
这段代码所做的是声明一个名为 FooDelegate 的协议;符合此协议的类将被声明为 @interface SomeClass : SuperClass
.因为这个类符合协议 FooDelegate
,它现在可以实现 FooDelegate
下的方法(要求实现这些方法,使用 @required
而不是 @optional
).最后一步是在符合FooDelegate
的类中实例化一个Foo
对象,并让这个Foo
对象拥有它的delegate属性设置:
What this code did was declare a protocol called FooDelegate; a class that conforms to this protocol would be declared like @interface SomeClass : SuperClass <FooDelegate> {}
. Because this class conforms to the protocol FooDelegate
, it now gets to implement the methods under FooDelegate
(to require that these be implemented, use @required
instead of @optional
). The last step is for a Foo
object to be instantiated in the class that conforms to FooDelegate
, and for this Foo
object to have its delegate property set:
Foo *obj = [[Foo alloc] init];
[obj setDelegate:self];
现在,您的类已准备好接收来自 Foo
对象的消息,这些对象的委托设置正确.
Now, your class is prepared to receive messages from Foo
objects that have their delegates set correctly.
这篇关于如何在 Objective-C 中使用自定义委托的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!