委托代理(degegate),顾名思义,把某个对象要作的事情委托给别的对象去作。那么别的对象就是这个对象的代理,代替它来打理要作的事。反映到程序中,首先要明确一个对象的委托方是哪一个对象,委托所作的内容是什么。
委托机制是一种设计模式,在不少语言中都用到的,这只是个通用的思想,网上会有不少关于这方面的介绍。那么在苹果开发过程当中,用到委托的程序实现思想以下,我主要拿如何在视图之间传输信息作个例子。
譬如:在两个页面(UIIview视图对象)实现传值,用委托(delegate)能够很好作到!
方法:
类A
@interface A:UIView
id transparendValueDelegate;
@property(nomatic, retain) id transparendValueDelegate;
@end
@implemtion A
@synthesize transparendValueDelegate
-(void)Function
{
NSString* value = @"hello";
//让代理对象执行transparendValue动做
[transparendValueDelegate transparendValue: value];
}
@end
类B
@interface B:UIView
NSString* value;
@end
@implemtion B
-(void)transparendValue:(NSString*)fromValue
{
value = fromValue;
NSLog(@"the value is %@ ",value);
}
@end
//下面的设置A代理委托对象为B
//在定义A和B类对象处:
A* a = [[A alloc] init];
B* b = [[B alloc] init];
a. transparendValueDelegate = b;//设置对象a代理为对象b
这样在视图A和B之间能够经过委托来传值!
下面这个例子委托有两类:
一、一个视图类对象的代理对象为父视图,子视图用代理实现让父视图显示别的子视图
二、同一父视图下的一个子视图为另外一个子视图的代理对象,让另外一个子视图改变自身背景色为给定的颜色
===============================================
规范格式以下:
@protocol TransparendValueDelegate;
@interface A:UIView
id< TransparendValueDelegate > m_dTransparendValueDelegate;
@property(nomatic, retain) id m_dTransparendValueDelegate;
@end
//代理协议的声明
@protocol TransparendValueDelegat<NSObject> { -(void)transparendValue:(NSString*)fromValue; }