objective-c - 如何在 Objective-C 中使用自定义委托(delegate)

我需要了解 Objective-C 中委托(delegate)方法的用法。谁能指出正确的来源?

最佳答案

您需要为您的类声明一个委托(delegate)协议(protocol)。 Foo 类的委托(delegate)协议(protocol)和接口(interface)示例可能看起来像这样:

@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 的协议(protocol);符合此协议(protocol)的类将被声明为 @interface SomeClass : SuperClass <FooDelegate> {} .因为这个类符合协议(protocol)FooDelegate ,它现在可以实现 FooDelegate 下的方法(要实现这些,请使用 @required 而不是 @optional )。最后一步是 Foo要在符合 FooDelegate 的类中实例化的对象, 对于这个 Foo对象设置其委托(delegate)属性:

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

现在,您的类(class)已准备好接收来自 Foo 的消息。其委托(delegate)设置正确的对象。

https://stackoverflow.com/questions/645449/

相关文章:

objective-c - Xcode 在 iOS 8 的 Main() 中抛出异常,断点为 'al

objective-c - 对 NSTimer 目标的弱引用以防止保留循环

objective-c - 从 NSMutableString 中删除最后一个字符

iphone - 如何将@selector 作为参数传递?

c - 什么是双星(例如 NSError **)?

ios - 缩放 UIView 及其所有子项

objective-c - NSMutableArray 按顺序添加对象

iphone - 如何在 NSSet 或 NSArray 中搜索具有特定属性的特定值的对象?

ios - iPhone:在 UITextField 上禁用 Auto-Cap/autocorrec

iphone - 以流畅的动画显示/隐藏导航栏