协议(Protocol)的用法和代码例子
来源:互联网 发布:linux vim 不保存 编辑:程序博客网 时间:2024/06/13 07:27
原文地址:http://www.cocoachina.com/newbie/basic/2010/0917/2106.html
协议,是通过网络,计算机使用者进行通讯后,互相进行约定规定的集合。两个类进行通讯,用协议就比较方便。下面是 CocoaChina 版主“angellixf”为新手写的协议入门介绍以及代码例子,希望对刚入门开发者有所帮助
一、说明
1.协议声明了可以被任何类实现的方法
2.协议不是类,它是定义了一个其他对象可以实现的接口
3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。
4.协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。
5:委托,就是调用自己定义方法,别的类来实现。
6.新特性说明
@optional预编译指令:表示可以选择实现的方法
@required预编译指令:表示必须强制实现的方法
二、定义
//.h@protocol ContactCtrlDelegate-(void)DismissContactsCtrl;@end@interface ContactsCtrl : UIViewController { id <ContactCtrlDelegate> delegate;}@property (nonatomic, assign) id <ContactCtrlDelegate> delegate;//.m@synthesize delegate;
三、例子
//例如:UITextView@protocol UITextViewDelegate <NSObject>@optional- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;- (BOOL)textViewShouldEndEditing:(UITextView *)textView;- (void)textViewDidBeginEditing:(UITextView *)textView;- (void)textViewDidEndEditing:(UITextView *)textView;- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;- (void)textViewDidChange:(UITextView *)textView;- (void)textViewDidChangeSelection:(UITextView *)textView;@end
如果要调用以上这些方法,就必须设置UITextView的委托:TextView.delegate = self;
四、Demo
1、ContactsCtrl.h
#import <UIKit/UIKit.h>
//定义协议
@protocol ContactCtrlDelegate
-(void)DismissContactsCtrl;
@end
@interface ContactsCtrl : UIViewController {
IBOutlet UINavigationBar *ContactNavBar;
id <ContactCtrlDelegate> delegate;
}
@property (nonatomic, assign) id <ContactCtrlDelegate> delegate;
-(IBAction)canCelBtn:(id)sender;
@end
2、ContactsCtrl.m
@implementation ContactsCtrl
@synthesize delegate;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
ContactNavBar.topItem.prompt = @"选取联系人发送短信";
}
//调用协议中的方法
-(IBAction)canCelBtn:(id)sender{
[delegate DismissContactsCtrl];
}
3、ProtocolDemoCtrl.h
#import <UIKit/UIKit.h>
#import "ContactsCtrl.h"
@interface ProtocolDemoCtrl : UIViewController <ContactCtrlDelegate>{//添加委托
ContactsCtrl *contactsView;
}
4、ProtocolDemoCtrl.m
#import "ProtocolDemoCtrl.h"
#define BARBUTTONADD(SELECTOR) [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:SELECTOR] autorelease];
@implementation ProtocolDemoCtrl
@synthesize contactsView;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = BARBUTTONADD(@selector(addContactAction:));
}
- (void)addContactAction:(id)sender{
ContactsCtrl *contactView = [[ContactsCtrl alloc] initWithNibName:@"ContactsCtrl" bundle:nil];
self.contactsView = contactView;
contactsView.delegate = self;//设置委托
[self presentModalViewController:contactsView animated:YES];
[contactView release];
}
//实现ContactCtrlDelegate协议中的方法
-(void)DismissContactsCtrl{
[contactsView dismissModalViewControllerAnimated:YES];
}
- 协议(Protocol)的用法和代码例子
- 协议(Protocol)的用法和代码例子
- 协议(Protocol)的用法和代码例子
- 协议(Protocol)的用法和代码例子 摘
- 协议(Protocol)的用法和代码例子 摘
- 协议(Protocol)的用法和代码例子
- 协议(Protocol)的用法和代码例子
- 协议(Protocol)的用法和代码例子 ios
- 协议(Protocol)的用法和代码例子 有demo
- 协议(Protocol)的用法和代码例子
- 协议(Protocol)的用法
- OC 协议(Protocol)的基本概念和用法
- protocol协议的简单用法
- 协议的用法 ios protocol
- 【Objective-C】OC中协议(Protocol)的基本概念和用法
- 黑马程序员-⑧bolck类型和协议protocol的用法
- Objective-C 协议protocol的用法和理解
- 黑马程序员------OC block(代码块)和protocol(协议)
- iOS的动态库
- Cocos2dx 3.0 过渡篇(四) 创建项目
- 数组栈
- HttpServletResponse
- 深入理解8583协议
- 协议(Protocol)的用法和代码例子
- Cocos2dx 3.0 过渡篇(五) 随机数的获取
- 【实用随记】前台实现查找
- Fl_Text_Display 例子
- 人口将天一卡通用
- iOS App内发送短信
- nvcbnthdfbvxhdfh
- 第七周项目三-----成员函数,友元函数和一般函数的区别
- 江山泪