您的位置:首页 > 编程语言

协议(Protocol)的用法和代码例子

2011-09-05 14:26 232 查看
http://www.cocoachina.com/bbs/read.php?tid-32173-keyword-protocol.html

协议(Protocol)的用法和代码例子

协议,是通过网络,计算机使用者进行通讯后,互相进行约定规定的集合。两个类进行通讯,用协议就比较方便。下面是 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];

}

具体看下Demo的实现哈,还有有时间可以看看Objective-c基础教程2.0这本书。(新手注意)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: