委托协议,相信是大多objective-c初学者非常疑惑的一个概念,下面我来给大家讲解讲解:
下面先让大家了解几个概念
protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。delegate-委托,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。
当一个A_View 里面包含了B_View
B_View需要调用A_View的一个弹出框,那么这个时候就需要用到委托了。
需要几个步骤
1。首先定一个协议UIBViewDelegate
2。A_View实现协议中的方法
3。B_View设置一个委托变量
4。把B_View的委托变量设置成A_View,意思就是 ,B_View委托A_View办事情。
5。事件发生后,用委托变量调用A_View中的协议方法
下面是UIBViewDelegate定义一个正式协议,代码如下:
//
// UIBViewDelegate.h
// test-protocol-delegate
//
// Created by b126 on 12-4-1.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol UIBViewDelegate <NSObject>
@optional
- (void)ontouch:(id)cc; //声明协议方法
@end
B_View中定义委托变量:
IBOutlet id< UIBViewDelegate > _touchdelegate; //设置委托变量
B_View调用委托:
}
-(IBAction)test:(id)sender{
[_touchdelegate ontouch:@"dd"];
}
A_View中实现响应:
- (void)ontouch:(id)cc{
NSLog(@"你点击了我");
UIAlertView *myalert = [[UIAlertView alloc] initWithTitle:@"通知" message:@"你点击了我" delegate:self cancelButtonTitle:@"确认" otherButtonTitles:nil,nil];
[myalert show];
[myalert release];
}
有一个非常重要的事情,就是,A_View中一定要要让委托指向自己:
- (void)viewDidLoad
{
[super viewDidLoad];
b_view = [[B_View alloc] initWithNibName:@"B_View" bundle:nil];
[self.view addSubview:b_view.view];
b_view._touchdelegate = self;//让委托指向自己
}
demo下载地址