Hi All,
Today I am going to talk about iOS Delagates.
This example shows how to write a common delegate for a mail composer in iOS.
First I am going to crate a seperate class for invoking the MailComposer Modal view controller.
The class is named “Common”.
So Create .m and .h files for Common.
Common.h
#import <Foundation/Foundation.h> #import <MessageUI/MessageUI.h> @interface Common : NSObject{ MFMailComposeViewController *mailComposer; } @property (nonatomic, weak) id <MFMailComposeViewControllerDelegate> delegate; -( void )sendMail:(UIViewController *) cont : (NSString *) mailSubject : (NSString *) mailBody; -( void ) setDelegate:(id <MFMailComposeViewControllerDelegate>)aDelegate; @end |
Now Go to Common.m and implement the methods.
#import "Common.h" @implementation Common @synthesize delegate; -( void )sendMail:(UIViewController *) cont :(NSString *) mailSubject : (NSString *) mailBody{ mailComposer = [[MFMailComposeViewController alloc]init]; [mailComposer setSubject:mailSubject]; mailComposer.mailComposeDelegate = delegate; [mailComposer setMessageBody:mailBody isHTML:NO]; [cont presentViewController:mailComposer animated:YES completion:nil]; } -( void ) setDelegate:(id <MFMailComposeViewControllerDelegate>)aDelegate{ if (delegate != aDelegate) { delegate = aDelegate; } } @end |
Now Go to ViewController.h
We don’t need any declarations inside this class, just need to add the delegate
#import <UIKit/UIKit.h> #import <MessageUI/MessageUI.h> @interface ViewController : UIViewController<MFMailComposeViewControllerDelegate> { } @end |
Now in the implementation class
ViewController.m
#import "ViewController.h" #import "Common.h" @interface ViewController () @end @implementation ViewController - ( void )viewDidLoad { Common *com = [Common new ]; [com setDelegate:self]; // Setting the Mail Composer delegate [com sendMail:self :@ "Mail Subject" :@ "Mail Body" ]; } #pragma mark - mail compose delegate -( void )mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{ if (result) { NSLog(@ "Result : %d" ,result); } if (error) { NSLog(@ "Error : %@" ,error); } [self dismissViewControllerAnimated:YES completion:nil]; } |
Ok. Now our MailComposer Delegate is implemented. Go on and run the application.