@protocol ContactCtrlDelegate -(void)DismissContactsCtrl; @end @interface ContactsCtrl : UIViewController { id <ContactCtrlDelegate> delegate; } @property (nonatomic, assign) id <ContactCtrlDelegate> delegate;.m
@synthesize delegate;
好比: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;
#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