IOS開發——Protocol使用協議

protocol ['prəutəkɔl] (樣例:http://blog.sina.com.cn/s/blog_6aafe9c90100yozz.html )
1、說明
 
兩個類進行通信,用協議就比較方便。  

1.協議聲明瞭可以被不論什麼類實現的方法  
2.協議不是類,它是定義了一個其它對象可以實現的接口  
3.假設在某個類中實現了協議中的某個方法,也就是這個類實現了那個協議。  
4.協議經常常使用來實現託付對象。一個託付對象是一種用來協同或者表明其它對象的特殊對象。  
5:託付,就是調用自定義方法,別的類來實現。  
6.新特性說明  
@optional預編譯指令:表示可以選擇實現的方法  
@required預編譯指令:表示必須強制實現的方法  


2、定義  
.h  
@protocol ContactCtrlDelegate 
-(void)DismissContactsCtrl; 
@end 


@interface ContactsCtrl : UIViewController { 
    id <ContactCtrlDelegate> delegate; 
} 
@property (nonatomic, assign) id <ContactCtrlDelegate> delegate; 
.m  
@synthesize delegate; 

3、樣例  

好比:UITextView 
html

@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;  


4、Demo  
一、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 
二、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]; 
} 

三、ProtocolDemoCtrl.h 
ui

#import <UIKit/UIKit.h> 
#import "ContactsCtrl.h" 
@interface ProtocolDemoCtrl : UIViewController <ContactCtrlDelegate>{//加入托付 
    ContactsCtrl *contactsView; 
} 

四、ProtocolDemoCtrl.m 
atom

#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]; 
} 

綜上,假設A類.h文件定義了一個協議,在A類裏面咱們還需要定義一個託付delegate,協議裏面有個必須實現的methodA方法(@required,這種方法在實現了協議的類裏面實現),在A類的.m文件裏需要調用這個methodA方法,咱們使用託付調用這個methodA方法spa

[delegate DismissContactsCtrl]; 
類B實現了這個協議,在.h文件裏定義類A的對象a,在.m文件裏需要實現methodA方法。並且需要設置託付

a.delegate = self;//設置託付

假設MethodA返回的是B類的對象,那麼在A類中就可以調用B類屬性和方法國,B這個類能夠調用A的屬性和方法。code


版權聲明:本文博客原創文章。博客,未經贊成,不得轉載。orm

相關文章
相關標籤/搜索