IT tutorials
 
Mobile
 

Iphone Application : Using Address Book, Email, and Maps (part 4) - Using the Message UI

12/9/2012 11:36:36 AM
- Windows 10 Product Activation Keys Free 2019 (All Versions)
- How To Bypass Torrent Connection Blocking By Your ISP
- How To Install Actual Facebook App On Kindle Fire

Using the Message UI

In our example of using the Message UI framework, we allow users to email a buddy by pressing the Send Mail button. We will populate the To field of the email with the address that we located in the address book. The user can then use the interface provided by the MFMailComposeViewController to edit the email and send it. As with the other features discussed this hour, we need to add the Message UI framework before a message will work.

We also need to conform to the MFMailComposeViewControllerDelegate, which includes a method mailComposeController:didFinishWithResult that is called after the user is finished sending a message.

Adding the Message UI Framework

Again, in the Xcode project window, right-click the Frameworks group and choose Add, Existing Frameworks from the menu. In the scrolling list, choose MessageUI.framework, and then click Add.

Open the BestFriendViewController.h interface file and add one more #import statement for <MessageUI/MessageUI.h>. Add MFMailComposeViewControllerDelegate to the list of protocols that we’re conforming to.

The final version of the interface is displayed in Listing 6.

Listing 6.
#import
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
#import <MessageUI/MessageUI.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>

@interface BestFriendViewController : UIViewController
<ABPeoplePickerNavigationControllerDelegate,MFMailComposeViewControllerDelegate>
{
    IBOutlet UILabel *name;
    IBOutlet UILabel *email;
    IBOutlet UIImageView *photo;
    IBOutlet MKMapView *map;
}

@property (nonatomic, retain) UILabel *name;
@property (nonatomic, retain) UILabel *email;
@property (nonatomic, retain) UIImageView *photo;
@property (nonatomic, retain) MKMapView *map;

- (IBAction)newBFF:(id)sender;
- (IBAction)sendEmail:(id)sender;

@end

					  

Displaying the Message Composer

To compose a message, we need to allocate an initialize an instance of MFMailComposeViewController. This modal view is then added to our view with presentModalViewController:animated. To set the To recipients, we use the appropriately named MFMailComposeViewController method setToRecipients. One item of interest is that the method expects an array, so we need to take the email address for our buddy and create an array with a single element in it so that we can use the method.

Speaking of the email address, where we will access it? Simple! Earlier we set the email UILabel to the address, so we’ll just use email.text to get the address of our buddy.

Create the sendEmail method using Listing 7 as your guide.

Listing 7.
 1: - (IBAction)sendEmail:(id)sender {
 2:     MFMailComposeViewController *mailComposer;
 3:     NSArray *emailAddresses;
 4:     emailAddresses=[[NSArray alloc]initWithObjects: email.text,nil];
 5:
 6:     mailComposer=[[MFMailComposeViewController alloc] init];
 7:     mailComposer.mailComposeDelegate=self;
 8:     [mailComposer setToRecipients:emailAddresses];
 9:     [self presentModalViewController:mailComposer animated:YES];
10:
11:     [emailAddresses release];
12:     [mailComposer release];
13: }

Unlike some of the other methods we’ve written this hour, there are few surprises here. Line 2 declares mailComposer as an instance of MFMailComposeViewController—the object that displays and handles message composition. Lines 3–4 define an array, emailAddresses, that contains a single element grabbed from the email UILabel.

Lines 6–8 allocate and initialize the MFMailComposeViewController object, setting its delegate to self (BestFriendViewController) and the recipient list to the emailAddresses array. Line 9 presents the message composition window onscreen.

Finally, lines 11–12 release the array of email addresses and the mailComposer MFMailComposeViewController object.

Handling Message Completion

When a user is finished composing/sending a message, the modal composition window should be dismissed and the MFMailComposeViewController object released. To do this, we need to implement the mailComposeController:didFinishWithResult method defined in the MFMailComposeViewControllerDelegate protocol.

Add this final method to the BestFriendViewController.m file:

- (void)mailComposeController:(MFMailComposeViewController*)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error {
    [self dismissModalViewControllerAnimated:YES];
}

All that is needed is the single line to dismiss the modal view, and with that, we’re done!

Use Build and Run to test the application. Select a contact and watch as the map finds your friend’s home location, zooms in, then sets an annotation. Use the Email button to compose and send an email. Fun and excitement for all!

In this project, shown in Figure 3, we’ve combined mapping, email, and address book features in a single, integrated application. You should now have some ideas about what is possible when you integrate existing iPhone application features into your software.

Figure 3. Mapping, email, and address book integration—all in one app.
 
Others
 
- Iphone Application : Using Address Book, Email, and Maps (part 3) - Using a Map Object
- Iphone Application : Using Address Book, Email, and Maps (part 2) - Accessing the Address Book
- Iphone Application : Using Address Book, Email, and Maps (part 1)
- Iphone Application : Extending Application Integration
- Introducing Windows Phone 8 : Phone Specifications
- Introducing Windows Phone 8 : A Different Kind of Phone
- iPhone Application Development : Working with Rich Media - Accessing and Playing the iPod Library
- Android Application Development : Initialization in MicroJobs.java (part 2)
- Android Application Development : Initialization in MicroJobs.java (part 1)
- Android Application Development : Initialization Parameters in AndroidManifest.xml
 
 
Top 10
 
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 2) - Wireframes,Legends
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 1) - Swimlanes
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Formatting and sizing lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Adding shapes to lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Sizing containers
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 3) - The Other Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 2) - The Data Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 1) - The Format Properties of a Control
- Microsoft Access 2010 : Form Properties and Why Should You Use Them - Working with the Properties Window
- Microsoft Visio 2013 : Using the Organization Chart Wizard with new data
programming4us programming4us
 
Popular tags
 
Video Tutorail Microsoft Access Microsoft Excel Microsoft OneNote Microsoft PowerPoint Microsoft Project Microsoft Visio Microsoft Word Active Directory Biztalk Exchange Server Microsoft LynC Server Microsoft Dynamic Sharepoint Sql Server Windows Server 2008 Windows Server 2012 Windows 7 Windows 8 Adobe Indesign Adobe Flash Professional Dreamweaver Adobe Illustrator Adobe After Effects Adobe Photoshop Adobe Fireworks Adobe Flash Catalyst Corel Painter X CorelDRAW X5 CorelDraw 10 QuarkXPress 8 windows Phone 7 windows Phone 8 BlackBerry Android Ipad Iphone iOS