Mail App Template iOS

 Start your iOS mail or chat app right here.

One of the few native iOS apps that could be better is email.  If you want to build your version of an email app, this is the perfect template to start with.

We’ve studied our favourite mail apps, like Gmail and Mailbox, and put together all the best stuff into this awesome custom mail template.  Check out the unique and intuitive features designed and built right into the working template.  You could even extend this design for a social chat/messaging app, the UI elements are all there, including the .psd files.

What’s included in this download

  • App Template Xcode project written in native Objective-C
  • Original layered Adobe Photoshop .psd files you can edit
  • 25+ Sliced .png files
  • Documentation
myapptemplates Mail App Template iOS

 Start your iOS mail or chat app right here. One of the few native iOS apps that could be better is email.  If you want to build your version of an email app, this is the perfect template to start with. We’ve studied our favourite mail apps, like Gmail and Mailbox, and put together all […]

  • License Details
  • XCode Sample Project
  • .PSD files
  • Retina support
  • .PNG Artwork
  • iOS 10 optimised
Our iOS and Android app templates are a perfect place to start building awesome apps. Get a functional native code base, eye-catching beautiful artwork with excellent UX, icon artwork and documentation. Make your app so beautiful it can't be ignored

Code Snippet

//
//  MainViewController.m
//  MailApp
//
//  Created by MyAppTemplates on 7/8/13.
//  Copyright (c) 2013 MyAppTemplates. All rights reserved.
//

#import "MainViewController.h"

#import "MainInboxCell.h"
#import "MainSimpleCell.h"
#import "MainDraftCell.h"
#import "MainColorCell.h"

#import "InboxViewController.h"
#import "ElementViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


+(MainViewController *) viewFromStoryboard
{
    return (MainViewController *)[super viewFromStoryBoard:@"MainViewController"];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    
    [lblMyName setText:@"Curtis James Jackson"];
    [lblMyMail setText:@"curtis@indaclub.com"];
    
    rightController = [InboxViewController viewFromStoryboard];
    navController = [[UICustomNavigationController alloc] initWithRootViewController:rightController];
    
    [navController.view setFrame:CGRectMake( 271, 0, rightController.view.frame.size.width, rightController.view.frame.size.height)];
    [self.view addSubview:navController.view];
    [navController.view setUserInteractionEnabled:NO];
    
//    [self.view bringSubviewToFront:imgvwRightHBar];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (IBAction) btnSetting_Click:(id)sender
{
    ElementViewController * elementController = [ElementViewController viewFromStoryboard];
    
    [self presentViewController:elementController animated:YES completion:^{
        ;
    }];
}



#pragma mark --
#pragma mark -- UITableViewDelegate Method --
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
	return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
	return 8 + [self.appDelegate.engine.arrAllGroups count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int cellRow = [indexPath row];
    
    return (cellRow == 7) ? 32 : 40;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
	int cellRow = [indexPath row];
    
	UITableViewCell * cell = nil;
    
    NSString *cellid = @"";
    
    switch (cellRow) {
        case 0:
            cellid = @"MainInboxCell";
            break;
        case 1:
        case 2:
        case 4:
        case 5:
        case 6:
            cellid = @"MainSimpleCell";
            break;
        case 3:
            cellid = @"MainDraftCell";
            break;
        case 7:
            cellid = @"MainEditCell";
            break;
        default:
            cellid = @"MainColorCell";
            break;
    }
    
    
    cell = [tableView dequeueReusableCellWithIdentifier:cellid];
    
    if (cell == nil) {
        switch (cellRow) {
            case 0:
                cell = [[MainInboxCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
                break;
            case 1:
            case 2:
            case 4:
            case 5:
            case 6:
                cell = [[MainSimpleCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
                break;
            case 3:
                cell = [[MainDraftCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];
                break;
            case 7:
                cell = [[MainEditCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];;
                break;
            default:
                cell = [[MainColorCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellid];;
                break;
        }
    }
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];


    if (cellRow < 8) {
        switch (cellRow) {
            case 0:
                [(MainInboxCell *)cell setCellContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_INBOX] count:7];
                break;
            case 1:
                [(MainSimpleCell *)cell setCellContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_STARRED]];
                break;
            case 2:
                [(MainSimpleCell *)cell setCellContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_SENT]];
                break;
            case 3:
                [(MainDraftCell *)cell setCellContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_DRAFT] count:2];
                break;
            case 4:
                [(MainSimpleCell *)cell setCellContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_TRASH]];
                break;
            case 5:
                [(MainSimpleCell *)cell setCellContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_ALL]];
                break;
            case 6:
                [(MainSimpleCell *)cell setCellContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_SPAM]];
                break;
            case 7:
                [(MainEditCell *)cell setContentWith:[self.appDelegate getStringWithScreenName:STRDIC_MAIN withStringID:STRID_MAIN_CELL_LABEL]];
                break;
        }
    }
    else {
        MailGroupData * grpData = [self.appDelegate.engine.arrAllGroups objectAtIndex:cellRow - 8];
        [(MainColorCell *)cell setContentWith:grpData.strName color:grpData.grpColor];
    }

    return cell;
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int row = [indexPath row];
    
    BOOL movable = FALSE;
    
    switch (row) {
        case 0: // Inbox
           [navController.view setFrame:CGRectMake( 271, 0, rightController.view.frame.size.width, rightController.view.frame.size.height)];
            movable = TRUE;
            break;
        case 1: // Starred
            ;
            break;
        default:
            break;
    }
    
    if (movable) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.3f];
        [UIView setAnimationDelegate:self];
        
        navController.view.transform = CGAffineTransformMakeTranslation( -271, 0 );
        [navController.view setUserInteractionEnabled:YES];
        
        [UIView commitAnimations];
    }
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}



#pragma mark -- 
#pragma mark -- MainEditCellDelegate --

- (void) didClickOnEdit:(MainEditCell *)mec
{
    ;
}

@end

Template Benefits

  • iOS 10 ready
  • iPhone 5/6/7/7+ ready
  • Beautiful, minimal design with excellent UX flow
  • Ready to run right away in Xcode 8
  • Prebuilt functionality saves you hundreds of hours of designing, programming, and testing
  • Customise the template in Xcode to build your own app
  • Adheres to Apple’s strict interface guidelines (HIG) for easier app approval
  • The easiest way to create your own app!