`

Protocol协议的用法

 
阅读更多

一、说明
两个类进行通讯,用协议就比较方便。

(书本上的东东,还是得看看)
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];
}

分享到:
评论

相关推荐

    urlprotocol协议设置

    在IT行业中,URLProtocol协议是一种自定义协议处理方式,它允许开发者扩展Windows系统对URL的解析功能,使得系统能够识别并处理自定义的协议类型,比如`myurl:`。这通常用于实现特定软件的内部链接或者集成不同应用...

    CX-Protocol协议宏操作手册(中文)(带目录).pdf

    在使用CX-Protocol协议宏操作手册之前,用户需要了解一些基本的安全和操作注意事项。手册中对可能造成伤害或产品损坏的危险事项使用了感叹号"!"进行标识,对可能导致受伤或产品损坏的警告事项使用了感叹号"!"进行...

    【转载】自定义URL Protocol 协议

    【自定义URL Protocol协议详解】 在计算机编程领域,URL(Uniform Resource Locator)是用于定位互联网资源的一种标准格式。默认情况下,我们常见的URL如"http://"、"ftp://"等,分别对应HTTP和FTP协议。然而,...

    CX-Protocol协议宏操作手册(中文)

    CX-Protocol协议宏操作手册详细介绍了如何使用该协议与PLC进行数据交换以及通信序列的创建和编辑。本文将从手册内容中提炼出关于CX-Protocol的关键知识点,并进行详细说明。 CX-Protocol的特点包括对不同PLC型号和...

    OpenProtocol_Specification_.pdf

    《OpenProtocol_Specification_》是一份详细的技术规范文档,它主要介绍了PF4000开放协议Atlas以及OpenProtocol协议的报文格式和使用方法。PF4000是阿特拉斯·科普柯(Atlas Copco)工业技术公司推出的一套工业通讯...

    iOS之协议protocol

    本教程将深入探讨协议的使用方法、使用场景以及其在类之间的通信规则。 首先,让我们了解协议的基本定义。协议在Objective-C中使用`@protocol`关键字声明,而在Swift中则使用`protocol`关键字。一个协议可以包含...

    让oc像swift那样给@protocol协议添加方法的默认实现教程加demo,

    在Objective-C(OC)中,协议(@protocol)主要用于定义对象间交互的接口,它们类似于接口,但不提供默认实现。然而,在Swift中,我们可以为协议提供默认实现,使得遵循该协议的类无需手动实现所有方法。这篇教程将...

    阿特拉斯拧紧机(Atlas)开放性协议 OpenProtocol_Specification_通讯.pdf

    根据提供的文档信息,本文将对阿特拉斯拧紧机(Atlas)开放性协议 OpenProtocol_Specification_通讯的相关知识点进行...通过了解这些消息的功能和使用方法,用户可以有效地利用OpenProtocol与阿特拉斯拧紧机进行交互。

    OpenProtocol_Specification_R_2_10_0_9836 4415 01.pdf

    7. 数据字段使用(Static Data Field use, Variable data field use):规定了静态数据字段和变量数据字段的实现规则和使用方法,保证数据传输的准确性和一致性。 8. 实现指南和通信(Implementation guidelines ...

    CX-Protocol协议宏操作手册

    CX-Protocol协议宏操作手册是一份详尽的指南,旨在帮助用户深入理解和熟练掌握欧姆龙PLC的协议宏使用方法。通过本手册的学习,用户不仅能够了解CX-Protocol的基本功能和操作步骤,还能掌握如何根据具体需求创建和...

    欧姆龙CX-Protocol协议宏操作手册(中文)

    总的来说,这本手册是针对使用欧姆龙CX-Protocol协议宏进行数据通信的工程师或技术人员的技术指导资料。它不仅提供了软件的操作方法,还对安全使用、系统配置和故障排除等进行了说明。手册中强调了用户在使用软件时...

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)

    HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端(通常是Web浏览器)和服务器之间如何交换信息的标准。HTTP协议位于TCP/IP协议栈的应用层,负责处理Web...

    cip (common industrial protocol) 通信协议 英文

    # Common Industrial Protocol (CIP) 通信协议详解 ## 概述 Common Industrial Protocol (CIP),即通用工业协议,是一种广泛应用于自动化行业的开放式网络通信协议。它支持多种物理层技术,包括Ethernet、...

    韦根协议 Wiegand protocol

    韦根协议(Wiegand protocol)是门禁控制系统中非常关键的一种通信协议,它由摩托罗拉公司制定,主要用于读卡器和卡片之间的数据传输。该协议规定了数据的传输方式,而不指定通讯的波特率和数据长度,这使得它能够...

    ios-协议protocol

    在iOS开发中,协议(Protocol)是Objective-C和Swift编程中的一个重要概念,它定义了一组方法,但并不实现这些方法。类、结构体或枚举类型可以遵循一个或多个协议,从而实现多态性,这使得代码更加灵活和可扩展。...

    科晟光子Protocol接口协议

    6. **科晟光子Protocol协议客户端开发说明(告警).docx**:这个文档提供了客户端应用如何使用协议进行告警处理的详细指南,包括错误报告和异常处理。 7. **科晟光子综合监控平台----通信协议 V2.2.pdf**:这份文档...

    ICT104纸钞机通讯协议 RS232 Protocol V02.pdf

    ICT104纸钞机通讯协议 RS232 Protocol V02文档详细介绍了ICT104纸钞机的RS232通信协议,该协议允许控制器与ICT纸钞机产品之间进行数据交换。以下是根据文档内容整理的知识点: 1. ICT104纸钞机通讯协议概述 ICT104...

    协议Protocol.playground.zip

    在Swift编程语言中,协议(Protocol)是一种强大的工具,它定义了一组相关方法和属性的蓝图,这些方法和属性可以被任何类型实现。这个“协议Protocol.playground.zip”文件显然是一个用于学习和实践Swift协议的代码...

    CANoe FDX Protocol手册

    CANoe FDX 协议手册 CANoe FDX (Fast Data eXchange) is a protocol for simple, fast, real-time exchange of data between CANoe and other systems via an Ethernet connection. The protocol enables other ...

Global site tag (gtag.js) - Google Analytics