要求:在一个UIView界面中又一个lable和Button,想点击按钮之后改变lable的值,用协议委托实现
Protocol(ChangeText.h):
#import <Foundation/Foundation.h>
@protocol ChangeText <NSObject>
-(void)change:(NSString *)val;
@end
Button.h:
#import <Foundation/Foundation.h>
#import "ChangeText.h"
@interface Button : NSObject
@property(nonatomic,retain) id<ChangeText> delegate;
-(void)changetext:(NSString *)str;
@end
Button.m:
#import "Button.h"
@implementation Button
-(void)changetext:(NSString *)val
{
if ([_delegate respondsToSelector:@selector(change:)]) {
[_delegate change:val];
}
}
- (void)dealloc
{
[_delegate release];
[super dealloc];
}
@end
创建一个遵循协议的View
ViewA.h:
#import <Foundation/Foundation.h>
#import "ChangeText.h"
#import "Button.h"
@interface ViewA : NSObject<ChangeText>
@property(nonatomic,retain)NSString* textValue;
@property(nonatomic,retain)Button *btn;
//实现协议的change方法
-(void)change;
@end
View.m:
#import "ViewA.h"
@implementation ViewA
+viewAWithText:(NSString *)val
{
ViewA *a = [[[ViewA alloc] init] autorelease];
a.textValue = @"text";
//初始化Button,并且将当前实现了协议的ViewA赋给button他的委托方法
Button *btn = [[[Button alloc] init] autorelease];
btn.delegate = a;
a.btn = btn;
return a;
}
-(void)change:(NSString *)val
{
self.textValue = val;
NSLog(@"当前的view中文本值是:%@",self.textValue);
}
-(void)dealloc
{
[_btn release];
[_textValue release];
[super dealloc];
}
@end
main:
#import <Foundation/Foundation.h>
#import "ViewA.h"
#import "Button.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
ViewA *view = [ViewA viewAWithText:@"text"];
NSLog(@"当然view中的文本值是:%@",view.textValue);
[view.btn changetext:@"lable"];
}
return 0;
}
结果:
2013-08-05 17:23:22.754 按钮点击[2144:303] 当然view中的文本值是:text
2013-08-05 17:23:22.756 按钮点击[2144:303] 当前的view中文本值是:lable