Saturday, December 28, 2013

GTA3 APK + Data High Compress


Features:

• Visually stunning updated graphics, character and vehicle models
• HD quality resolution
• Gameplay optimized for touch screen devices
• Custom controls for the mobile platform
• Countless hours of gameplay
• Gamepad Support for select USB controllers

Download Apk:
GTA3v10.apk ( 9 MB)

Download Data:
GTA3.rar (3.7 MB)

Instruction:
Install apk and extract data files SDCard/Android/Data/

1)Open Game,Accept Eula USER AGREEMENT
2)It will ask you to download data again,press back and minimize game
3)now play game from notification bar or recent apps
4)Enjoy

Cheat Grand Theft Auto San Andreas Root Only


Screen Shoot :



Download Cheat :

Instrucsions :

Cara Instal Cheat :

copy seluruh isi dalam folder "script" ke sdcard/android/data/com.rockstar.gta.sa/
(yang dicopy isi foldernya aja)

Instal cleo APK, pilih yg ada icon GTA SA ( Muncul Super SU Pilih " Ya " )

Buka GTA SA PADA HP ANDROID ANDA

Cara Mengaktifkan Cheat : Pinch / Cubit - Cubit Pada Layar Pakek 2 Jari

Enjoy Cheating :D




ENGLISH :


copy the entire contents of the folder "script" to sdcard / android / data / com.rockstar.gta.sa /

(which copied the folder contents only)

Install APK cleo, select the existing icon GTA SA (Appeared Super SU Select "Yes")

Open Mobile GTA SA ON YOUR ANDROID

How to Enable Cheat: Pinch - Pinch two fingers pakek Onscreen

Cheating Enjoy: D




Wednesday, December 25, 2013

Lord Of Arcana PSP



SIZE : 721 MB
Format : CSO


Lord Of Arcana PSP Save Data 100% Complete


Feature Save Data : 
Level 99, All Chapters Done, All Weapons, Armors, Orbs and Cards unlocked. Enjoy! :) 

Dynasty Warrior Vol.2 English Save Data 100% Complete


Save Data 100% Unlock Dynasty Warrior Vol.2 English

Features Save Data :
Everyone unlocked 100% and all officers, even Chaos difficulty setting, all horses maxed



PPSSPP GOLD 9.6 Apk


See http://www.ppsspp.org for more information.
Please note that ARMv6-based devices may have various kinds of issues
, and more modern devices are recommended.
* PSP is a trademark of Sony, Inc.


                                  

Old Version :
New Version :


Friday, December 20, 2013

Grand Theft Auto: San Andreas MOD Apk + Data OBB Full Version




Five years ago, Carl Johnson escaped from the pressures of life in Los Santos, San Andreas, a city tearing itself apart with gang trouble, drugs and corruption. Where filmstars and millionaires do their best to avoid the dealers and gangbangers.

Now, it’s the early 90’s. Carl’s got to go home. His mother has been murdered, his family has fallen apart and his childhood friends are all heading towards disaster.

On his return to the neighborhood, a couple of corrupt cops frame him for homicide. CJ is forced on a journey that takes him across the entire state of San Andreas, to save his family and to take control of the streets.

Rockstar Games brings its biggest release to mobile yet with a vast open-world covering the state of San Andreas and its three major cities – Los Santos, San Fierro and Las Venturas – with enhanced visual fidelity and over 70 hours of gameplay.


LINK DOWNLOAD GTA SA ANDROID

SAVE DATA GAME GTA SA 100% COMPLATE :
Http://androidsenpai.blogspot.com/2013/12/save-data-100-complate-grand-theft-auto.html

APK Normal :

APK NORMAL ( PACTHED ) :

APK NORMAL VERSI 1.0.3 ( PACTHED ) :
DOWNLOAD Via Tusfiles 10MB

APK MOD MONEY + AMMO :
Download Via ZippyShare 10MB

GTA SA DATA Sharebeast :

Part 1 
Part 2 

Part 3
Part 4 
Part 5 
Part 6 

Part 7 
Part 8 
Part 9


APK + DATA 1.0.3 :
Single Link Tusfiles : Download Here
Single Link Direct : Download Here
Single Link Mega.co.nz : Download Here
Single Link Google Drive : Download Here

Total Size : 1.6GB > AFTER EXRACT RAR TOTAL " SIZE 2.4GB "

Recommend Setting :
Draw          : 0-30 %
Resolution : 50-90%
Grafik         : medium/low


Instruction To Instal : 
Download all files above
Install apk 
Put data on Sdcard\android\obb\here
Play the game

Thursday, December 12, 2013

PPSSPP Gold Android






See http://www.ppsspp.org for more information.
Please note that ARMv6-based devices may have various kinds of issues
, and more modern devices are recommended.
* PSP is a trademark of Sony, Inc.

VIDEO PREVIEW


Screenshots:

PPSSPP - screenshot

PPSSPP - screenshot

Link Download :

Dynasty Warrior Vol 2 PSP Game







Udah lama Sharebertron Gak Post Game PSP

Like Dulu Sebelum Download
https://www.facebook.com/sharebertron

Link Download :

Mega Full Speed Download :
Link Download :Dynasty Warrior Vol 2 PSP.iso 164 MB

Indowebster :
Link Download : Dynasty Warrior Vol 2 PSP.iso 164MB

Mediafire :
Link Download : Dynasty Warrior Vol 2 PSP.iso 164 MB

Emulator PSP ANDROID : http://sharebertron.blogspot.com/PPSSPPGold.apk 

Tuesday, July 16, 2013

HTTP Live Streaming Tutorial With HTML5 and Ruby Sinatra

HTTP Live Streaming is a way to send audio and video over HTTP from a web server to client software on the desktop or to iOS-based devices. HTTP Live Streaming sends audio and video as a series of small files, typically of about 10 seconds duration, called media segment files. An index file, or playlist, gives the clients the URLs of the media segment files. The playlist can be periodically refreshed to accommodate live broadcasts, where media segment files are constantly being produced.

Full Source Code: http://bit.ly/12EdHal

1. Download Apple HTTP Live Streaming Command Line Tools: https://developer.apple.com/streaming/

2. With the MP4 video (mine is Iron-Man-3.mp4) in the same directory:


$ mediafilesegmenter Iron-Man-3.mp4

dyn-209-2-221-215:tutorial ktran$ mediafilesegmenter Iron-Man-3.mp4
Jul 16 2013 14:25:35.304: Using floating point is not backward compatible to iOS 4.1 or earlier devices
Jul 16 2013 14:25:35.304: Processing file /Users/ktran/Desktop/tutorial/Iron-Man-3.mp4
Jul 16 2013 14:25:35.338: Finalized fileSequence0.ts
Jul 16 2013 14:25:35.343: segment bitrate 1.98 Mbits/sec is new max
Jul 16 2013 14:25:35.370: Finalized fileSequence1.ts
Jul 16 2013 14:25:35.377: segment bitrate 4.38 Mbits/sec is new max
Jul 16 2013 14:25:35.401: Finalized fileSequence2.ts
Jul 16 2013 14:25:35.401: segment bitrate 5.24 Mbits/sec is new max
Jul 16 2013 14:25:35.420: Finalized fileSequence3.ts
Jul 16 2013 14:25:35.440: Finalized fileSequence4.ts
Jul 16 2013 14:25:35.470: Finalized fileSequence5.ts
Jul 16 2013 14:25:35.471: segment bitrate 6.56 Mbits/sec is new max
Jul 16 2013 14:25:35.490: Finalized fileSequence6.ts
Jul 16 2013 14:25:35.514: Finalized fileSequence7.ts
Jul 16 2013 14:25:35.549: Finalized fileSequence8.ts
Jul 16 2013 14:25:35.550: segment bitrate 8.19 Mbits/sec is new max
Jul 16 2013 14:25:35.586: Finalized fileSequence9.ts
Jul 16 2013 14:25:35.613: Finalized fileSequence10.ts
Jul 16 2013 14:25:35.653: Finalized fileSequence11.ts
Jul 16 2013 14:25:35.703: Finalized fileSequence12.ts
Jul 16 2013 14:25:35.739: Finalized fileSequence13.ts
Jul 16 2013 14:25:35.765: Finalized fileSequence14.ts
Jul 16 2013 14:25:35.766: Finalized fileSequence15.ts
Jul 16 2013 14:25:35.766: segment does not contain sync frame
Jul 16 2013 14:25:35.767: average bit rate is 5.28 Mbits/sec - max file bit rate is 8.19 Mbits/sec
dyn-209-2-221-215:tutorial ktran$

3. Install Ruby Sinatra and Thin (if not installed)

$ gem install sinatra
$ gem install thin


dyn-209-2-214-100:tutorial ktran$ gem install sinatra
Successfully installed sinatra-1.4.3
1 gem installed
Installing ri documentation for sinatra-1.4.3...
Installing RDoc documentation for sinatra-1.4.3...
dyn-209-2-214-100:tutorial ktran$
dyn-209-2-214-100:tutorial ktran$ gem install thin
Building native extensions. This could take a while...
Successfully installed thin-1.5.1
1 gem installed
Installing ri documentation for thin-1.5.1...
Installing RDoc documentation for thin-1.5.1...
dyn-209-2-214-100:tutorial ktran$

3. Create the server.rb file and index.html file in the same directory as your video segments. 

 server.rb


require 'sinatra'
require 'rubygems'

get '/' do
File.read(File.join('.', 'index.html'))
end

get '/:filename' do
File.read(File.join('.', "#{params[:filename]}"))
end

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>HTTP Live Streaming Example</title>
<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet">
<script src="http://vjs.zencdn.net/c/video.js"></script>
</head>
<body>
<video class="video-js vjs-default-skin"
controls preload="auto" width="1280" height="720"
data-setup='{"example_option":true}'>
<source src="http://localhost:4567/prog_index.m3u8" type='application/x-mpegURL'/ >
</video>

</body>
</html>

3. Start the server.

$ ruby server.rb


4. Go to a web browser and go to the address: http://localhost:4597.

 First Mistake - I Didn't Create a General Route to Send Files - But At Least I Know It's Correctly Requesting All of the Segments


dyn-209-2-214-100:tutorial ktran$ ruby server.rb
== Sinatra/1.4.3 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET / HTTP/1.1" 200 1204 0.0040
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /prog_index.m3u8 HTTP/1.1" 200 680 0.0009
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /prog_index.m3u8 HTTP/1.1" 200 680 0.0010
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence0.ts HTTP/1.1" 404 453 0.0011
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence1.ts HTTP/1.1" 404 453 0.0013
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence2.ts HTTP/1.1" 404 453 0.0009
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence3.ts HTTP/1.1" 404 453 0.0009
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence4.ts HTTP/1.1" 404 453 0.0009
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence5.ts HTTP/1.1" 404 453 0.0009
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence6.ts HTTP/1.1" 404 453 0.0008
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence7.ts HTTP/1.1" 404 453 0.0010
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence8.ts HTTP/1.1" 404 453 0.0009
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence9.ts HTTP/1.1" 404 453 0.0008
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence10.ts HTTP/1.1" 404 454 0.0008
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence11.ts HTTP/1.1" 404 454 0.0009
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence12.ts HTTP/1.1" 404 454 0.0011
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence13.ts HTTP/1.1" 404 454 0.0011
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence14.ts HTTP/1.1" 404 454 0.0008
127.0.0.1 - - [16/Jul/2013 14:59:33] "GET /fileSequence15.ts HTTP/1.1" 404 454 0.0009

Success




dyn-209-2-214-100:tutorial ktran$ ruby server.rb
== Sinatra/1.4.3 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET / HTTP/1.1" 200 1204 0.0039
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /prog_index.m3u8 HTTP/1.1" 200 680 0.0011
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /prog_index.m3u8 HTTP/1.1" 200 680 0.0008
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /fileSequence0.ts HTTP/1.1" 200 2468252 0.0208
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /fileSequence1.ts HTTP/1.1" 200 5461964 0.0228
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /fileSequence2.ts HTTP/1.1" 200 6529428 0.0398
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /fileSequence3.ts HTTP/1.1" 200 5280732 0.0163
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /fileSequence4.ts HTTP/1.1" 200 5495616 0.0246
127.0.0.1 - - [16/Jul/2013 15:04:18] "GET /fileSequence5.ts HTTP/1.1" 200 8170480 0.0412
127.0.0.1 - - [16/Jul/2013 15:04:33] "GET /fileSequence6.ts HTTP/1.1" 200 4904168 0.0152
127.0.0.1 - - [16/Jul/2013 15:04:43] "GET /fileSequence7.ts HTTP/1.1" 200 6491452 0.0148
127.0.0.1 - - [16/Jul/2013 15:04:53] "GET /fileSequence8.ts HTTP/1.1" 200 10209716 0.0429
127.0.0.1 - - [16/Jul/2013 15:05:03] "GET /fileSequence9.ts HTTP/1.1" 200 9690648 0.0372
127.0.0.1 - - [16/Jul/2013 15:05:13] "GET /fileSequence10.ts HTTP/1.1" 200 6523036 0.0215
127.0.0.1 - - [16/Jul/2013 15:05:22] "GET /fileSequence11.ts HTTP/1.1" 200 5998328 0.0246
127.0.0.1 - - [16/Jul/2013 15:05:33] "GET /fileSequence12.ts HTTP/1.1" 200 8308284 0.0357
127.0.0.1 - - [16/Jul/2013 15:05:42] "GET /fileSequence13.ts HTTP/1.1" 200 6363236 0.0265
127.0.0.1 - - [16/Jul/2013 15:05:53] "GET /fileSequence14.ts HTTP/1.1" 200 7246648 0.0295
127.0.0.1 - - [16/Jul/2013 15:06:02] "GET /fileSequence15.ts HTTP/1.1" 200 255492 0.0037
127.0.0.1 - - [16/Jul/2013 15:06:54] "GET /fileSequence0.ts HTTP/1.1" 200 2468252 0.0124
127.0.0.1 - - [16/Jul/2013 15:06:54] "GET /fileSequence1.ts HTTP/1.1" 200 5461964 0.0062
127.0.0.1 - - [16/Jul/2013 15:06:54] "GET /fileSequence2.ts HTTP/1.1" 200 6529428 0.0151
127.0.0.1 - - [16/Jul/2013 15:06:54] "GET /fileSequence3.ts HTTP/1.1" 200 5280732 0.0034
127.0.0.1 - - [16/Jul/2013 15:06:54] "GET /fileSequence4.ts HTTP/1.1" 200 5495616 0.0052
127.0.0.1 - - [16/Jul/2013 15:06:54] "GET /fileSequence5.ts HTTP/1.1" 200 8170480 0.0167
Note: You can't view the movie on multiple browsers at once.

Sources: http://www.christopherlavender.com/2012/07/14/http-live-streaming-part-1-setup-segment-stream/

Monday, July 8, 2013

Recursive Interview Questions Tutorial (WIP)


The most important thing to learn is how to think recursively. This allows you to solve a large class of problems relatively simply. It's important to know for job interviews. I had interviewed at Google six months ago and because I botched an interview question that could have been solved recursively, the interviewer told the recruiter I "lacked fundamental understanding of computer science". 

To solve a problem recursively:

1)  Think about how to solve the problem for simple cases (base case). 
2)  Determine how to break down larger cases into smaller instances (recursive decomposition).

Remember that every recursive algorithm has two components: the base case and the recursive decomposition. 

Problem #1 Reverse A String
Base Case:  When the string is the empty string is it the same backwards as it is forwards
Recursive Decomposition: For strings, to shrink the string to make forward progress is the same as solving the problem for substrings of the string, and then combining the sub-solutions.


/* Returns the reverse of the indicated string. */
string reverseString(string line) {
if (line == "")
return "";
else
return reverseString(line.substr(1)) + line[0];
}

Problem #2 Count Spaces in A String
Base Case:  When the string is empty is cannot have a space so the count of spaces is 0.
Recursive Decomposition: Check character by character by working with substrings of the string, and then sum the counts of the strings. 


/* Returns the count of white spaces in a string*/
int countSpaces(string line){
if (line.length() == 0)
return 0;
else
return ((isspace(line[0]) ? 1 : 0) + countSpaces(line.substr(1)));
}
Problem #3 Find Last Occurrence of Character in String
Base Case: Well if you are at the end of the string and no characters follow, it must be the last occurrence if there is a match. 
Recursive Decomposition: Start at the end of the string and after each call remove the last character. 


/* Return the index of the last occurence of a character in the string */
int find_last_occurence(string line, char character){
if (line[line.length()-1] == character)
return (int)line.length();
else if(line.length() == 0)
return -1;
else
return find_last_occurence(line.substr(0,line.length()-1), character);
}

Spark Notes Article That I Thought Was Useful: http://www.sparknotes.com/cs/recursion/whatisrecursion/section2.rhtml

Problem #4 Traversing a Binary Tree. Inorder, preorder, postorder.

Problem #5 Print all subsets of a set. 

Problem #6 Print all alphanumeric combinations of a phone number. 

These are the slides that I found on the Stanford Engineering Everywhere site that I found useful to learn more about recursion. 
























Saturday, July 6, 2013

A Simple Server in C++

Makefile


default:
g++ server.cpp
./a.out
clean:
rm -f a.out

server.cpp


//
// server.cpp
// SimpleServer
//
// Created by Kurry Tran on 7/3/13.
// Copyright (c) 2013 Kurry Tran. All rights reserved.
//

#include <iostream>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <netdb.h>

void* SocketHandler(void*);

int main(int argc, const char * argv[])
{
int host_port= 1101;
struct sockaddr_in my_addr;
int hsock;
int *p_int;

socklen_t addr_size = 0;
int* csock;
sockaddr_in sadr;
pthread_t thread_id=0;

hsock = socket(AF_INET, SOCK_STREAM, 0);
if(hsock == -1){
std::cout <<"Error initializing socket " << errno << std::endl;
goto FINISH;
}
p_int = (int*)malloc(sizeof(int));
*p_int = 1;

if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||
(setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){
std::cout <<"Error setting options " << errno << std::endl;
free(p_int);
goto FINISH;
}
free(p_int);

my_addr.sin_family = AF_INET ;
my_addr.sin_port = htons(host_port);

memset(&(my_addr.sin_zero), 0, 8);
my_addr.sin_addr.s_addr = INADDR_ANY ;

if( bind( hsock, (sockaddr*)&my_addr, sizeof(my_addr)) == -1 ){
std::cerr << "Error binding to socket, make sure nothing else is listening on this port " << errno << std::endl;
goto FINISH;
}

if(listen( hsock, 10) == -1 ){
std::cerr << "Error listening " << errno << std::endl;
goto FINISH;
}

addr_size = sizeof(sockaddr_in);

while(true){
std::cout <<"waiting for a connection on localhost:"<<host_port<< std::endl;
csock = (int*)malloc(sizeof(int));
if((*csock = accept( hsock, (sockaddr*)&sadr, &addr_size))!= -1){
std::cout <<"---------------------\nReceived connection from "<< inet_ntoa(sadr.sin_addr) << std::endl;
pthread_create(&thread_id,0,&SocketHandler, (void*)csock );
pthread_detach(thread_id);
}
else{
std::cerr << "Error accepting " << errno << std::endl;
}
}

FINISH:
;
}

void *SocketHandler(void *lp){
int *csock = (int *)lp;

char buffer[1024];
int buffer_len = 1024;
ssize_t bytecount;

memset(buffer, 0, buffer_len);
if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){
std::cerr << "Error receiving data " << errno << std::endl;
goto FINISH;
}
std::cout << "Received bytes " << bytecount << std::endl << "Received string "<< buffer << std::endl;

if((bytecount = send(*csock, buffer, strlen(buffer), 0))== -1){
std::cerr << "Error sending data " << errno << std::endl;
goto FINISH;
}
std::cout << "Sent bytes " << bytecount << std::endl;

FINISH:
close(*csock);
free(csock);
return 0;
}


Wednesday, June 26, 2013

How To Make Fast Scrolling UITableViews With Custom Section Headers and Custom UITableViewCells




1. Create a new master detail application in XCode.

2. To set a custom flat navigation bar color create a two new objective-c categories with the code below and configure the navigation bar by importing the UINavigationBar+FlatUI.h file into your master view controller and calling configureFlatNavigationBarWithColor: on your navigation bar in the viewDidLoad method. You should end up with something like below.




// At the Top of the file
#import "UINavigationBar+FlatUI.h"

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
[self.navigationController.navigationBar configureFlatNavigationBarWithColor:[UIColor colorWithRed:44.0f/255.0f green:71.0f/255.0f blue:98.0f/255.0f alpha:1.0f]];
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
}

UINavigationBar+FlatUI.h


//
// UINavigationBar+FlatUI.h
// FlatUI
//
// Created by Jack Flintermann on 5/3/13.
// Copyright (c) 2013 Jack Flintermann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UINavigationBar (FlatUI)

- (void) configureFlatNavigationBarWithColor:(UIColor *)color; UI_APPEARANCE_SELECTOR

@end

UINavigationBar+FlatUI.m


//
// UINavigationBar+FlatUI.m
// FlatUI
//
// Created by Jack Flintermann on 5/3/13.
// Copyright (c) 2013 Jack Flintermann. All rights reserved.
//

#import "UINavigationBar+FlatUI.h"
#import "UIImage+FlatUI.h"

@implementation UINavigationBar (FlatUI)

- (void) configureFlatNavigationBarWithColor:(UIColor *)color {
[self setBackgroundImage:[UIImage imageWithColor:color cornerRadius:0]
forBarMetrics:UIBarMetricsDefault & UIBarMetricsLandscapePhone];
NSMutableDictionary *titleTextAttributes = [[self titleTextAttributes] mutableCopy];
if (!titleTextAttributes) {
titleTextAttributes = [NSMutableDictionary dictionary];
}
[titleTextAttributes setValue:[UIColor clearColor] forKey:UITextAttributeTextShadowColor];
[titleTextAttributes setValue:[NSValue valueWithUIOffset:UIOffsetMake(0, 0)] forKey:UITextAttributeTextShadowOffset];
[self setTitleTextAttributes:titleTextAttributes];
if([self respondsToSelector:@selector(setShadowImage:)])
{
[self setShadowImage:[UIImage imageWithColor:[UIColor clearColor] cornerRadius:0]];
}
}

@end

UIImage+Color.h


//
// UIImage+Color.h
// FlatUI
//
// Created by Jack Flintermann on 5/3/13.
// Copyright (c) 2013 Jack Flintermann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIImage (FlatUI)

+ (UIImage *)imageWithColor:(UIColor *)color
cornerRadius:(CGFloat)cornerRadius;

+ (UIImage *) backButtonImageWithColor:(UIColor *)color
barMetrics:(UIBarMetrics) metrics
cornerRadius:(CGFloat)cornerRadius;

UIImage+Color.m


+ (UIImage *)imageWithColor:(UIColor *)color
cornerRadius:(CGFloat)cornerRadius {
CGFloat minEdgeSize = edgeSizeFromCornerRadius(cornerRadius);
CGRect rect = CGRectMake(0, 0, minEdgeSize, minEdgeSize);
UIBezierPath *roundedRect = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
roundedRect.lineWidth = 0;
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f);
[color setFill];
[roundedRect fill];
[roundedRect stroke];
[roundedRect addClip];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius)];
}

+ (UIImage *) backButtonImageWithColor:(UIColor *)color
barMetrics:(UIBarMetrics) metrics
cornerRadius:(CGFloat)cornerRadius {

CGSize size;
if (metrics == UIBarMetricsDefault) {
size = CGSizeMake(50, 30);
}
else {
size = CGSizeMake(60, 23);
}
UIBezierPath *path = [self bezierPathForBackButtonInRect:CGRectMake(0, 0, size.width, size.height) cornerRadius:cornerRadius];
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
[color setFill];
[path addClip];
[path fill];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, 15, cornerRadius, cornerRadius)];

}

3. Now to make the navigation items look flat we can create another objective-c category to change the appearance. Import UIBarButtonItem+FlatUI.h in your master view controller Then add the code below to the viewDidLoad method. You should see something like this:



- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
[self.navigationController.navigationBar configureFlatNavigationBarWithColor:[UIColor colorWithRed:44.0f/255.0f green:71.0f/255.0f blue:98.0f/255.0f alpha:1.0f]];
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
[UIBarButtonItem configureFlatButtonsWithColor:[UIColor colorWithRed:52.0f/255.0f green:152.0f/255.0f blue:219.0f/255.0f alpha:1.0f]
highlightedColor:[UIColor colorWithRed:41.0f/255 green:128.0f/255 blue:185.0f/255 alpha:1.0f]
cornerRadius:3];
}

UIBarButtonItem+FlatUI.h


//
// UIBarButtonItem+FlatUI.h
// FlatUI
//
// Created by Jack Flintermann on 5/8/13.
// Copyright (c) 2013 Jack Flintermann. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIBarButtonItem (FlatUI)

// styles a single bar button item
- (void) configureFlatButtonWithColor:(UIColor *)color
highlightedColor:(UIColor *)highlightedColor
cornerRadius:(CGFloat) cornerRadius UI_APPEARANCE_SELECTOR;

// styles all bar button items that exist within a class heirarchy (same as UIAppearanceProxy methods)
+ (void) configureFlatButtonsWithColor:(UIColor *) color
highlightedColor:(UIColor *)highlightedColor
cornerRadius:(CGFloat) cornerRadius
whenContainedIn:(Class )containerClass, ... NS_REQUIRES_NIL_TERMINATION;

// styles all bar button items (can be overwritten with the above methods)
+ (void) configureFlatButtonsWithColor:(UIColor *) color
highlightedColor:(UIColor *)highlightedColor
cornerRadius:(CGFloat) cornerRadius;


// removes the text shadows off a single bar button item (sadly, this can't be easily done for all buttons simultaneously)
- (void) removeTitleShadow;

@end

UIBarButtonItem+FlatUI.m


//
// UIBarButtonItem+FlatUI.m
// FlatUI
//
// Created by Jack Flintermann on 5/8/13.
// Copyright (c) 2013 Jack Flintermann. All rights reserved.
//

#import "UIBarButtonItem+FlatUI.h"
#import "UIImage+FlatUI.h"

@implementation UIBarButtonItem (FlatUI)

- (void) configureFlatButtonWithColor:(UIColor *)color
highlightedColor:(UIColor *)highlightedColor
cornerRadius:(CGFloat) cornerRadius {

[UIBarButtonItem configureItemOrProxy:self forFlatButtonWithColor:color highlightedColor:highlightedColor cornerRadius:cornerRadius];

}

+ (void) configureFlatButtonsWithColor:(UIColor *) color
highlightedColor:(UIColor *)highlightedColor
cornerRadius:(CGFloat) cornerRadius {

[self configureFlatButtonsWithColor:color highlightedColor:highlightedColor cornerRadius:cornerRadius whenContainedIn:[UINavigationBar class], [UINavigationController class], nil];
}

+ (void) configureFlatButtonsWithColor:(UIColor *) color
highlightedColor:(UIColor *)highlightedColor
cornerRadius:(CGFloat) cornerRadius
whenContainedIn:(Class )containerClass, ... {
va_list vl;
va_start(vl, containerClass);
id appearance = [UIBarButtonItem appearanceWhenContainedIn:containerClass, nil];
va_end(vl);
[UIBarButtonItem configureItemOrProxy:appearance forFlatButtonWithColor:color highlightedColor:highlightedColor cornerRadius:cornerRadius];
}

- (void) removeTitleShadow {
NSMutableDictionary *titleTextAttributes = [[self titleTextAttributesForState:UIControlStateNormal] mutableCopy];
if (!titleTextAttributes) {
titleTextAttributes = [NSMutableDictionary dictionary];
}
[titleTextAttributes setValue:[NSValue valueWithUIOffset:UIOffsetMake(0, 0)] forKey:UITextAttributeTextShadowOffset];
[self setTitleTextAttributes:titleTextAttributes forState:UIControlStateNormal];
}

//helper method, basically a wrapper to allow creating a custom UIAppearance method that doesn't conform to the usual naming style
+ (void) configureItemOrProxy:(id)appearance
forFlatButtonWithColor:(UIColor *)color
highlightedColor:(UIColor *)highlightedColor
cornerRadius:(CGFloat) cornerRadius {
UIImage *backButtonPortraitImage = [UIImage backButtonImageWithColor:color
barMetrics:UIBarMetricsDefault
cornerRadius:cornerRadius];
UIImage *highlightedBackButtonPortraitImage = [UIImage backButtonImageWithColor:highlightedColor
barMetrics:UIBarMetricsDefault
cornerRadius:cornerRadius];
UIImage *backButtonLandscapeImage = [UIImage backButtonImageWithColor:color
barMetrics:UIBarMetricsLandscapePhone
cornerRadius:2];
UIImage *highlightedBackButtonLandscapeImage = [UIImage backButtonImageWithColor:highlightedColor
barMetrics:UIBarMetricsLandscapePhone
cornerRadius:2];

[appearance setBackButtonBackgroundImage:backButtonPortraitImage
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[appearance setBackButtonBackgroundImage:backButtonLandscapeImage
forState:UIControlStateNormal
barMetrics:UIBarMetricsLandscapePhone];
[appearance setBackButtonBackgroundImage:highlightedBackButtonPortraitImage
forState:UIControlStateHighlighted
barMetrics:UIBarMetricsDefault];
[appearance setBackButtonBackgroundImage:highlightedBackButtonLandscapeImage
forState:UIControlStateHighlighted
barMetrics:UIBarMetricsLandscapePhone];

[appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(1.0f, 1.0f) forBarMetrics:UIBarMetricsDefault];
[appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(1.0f, 1.0f) forBarMetrics:UIBarMetricsLandscapePhone];

UIImage *buttonImageNormal = [UIImage imageWithColor:color cornerRadius:cornerRadius];
UIImage *buttonImageHightlighted = [UIImage imageWithColor:highlightedColor cornerRadius:cornerRadius];
[appearance setBackgroundImage:buttonImageNormal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[appearance setBackgroundImage:buttonImageHightlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
}

@end
4. To create custom section header views in your tableview create a new section header view class and add a new category and add the code below to your master view controller. Also add the QuartzCore.Framework to your project. You should end up with something like this.








- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
[self.navigationController.navigationBar configureFlatNavigationBarWithColor:[UIColor colorWithRed:44.0f/255.0f green:71.0f/255.0f blue:98.0f/255.0f alpha:1.0f]];
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
[UIBarButtonItem configureFlatButtonsWithColor:[UIColor colorWithRed:52.0f/255.0f green:152.0f/255.0f blue:219.0f/255.0f alpha:1.0f]
highlightedColor:[UIColor colorWithRed:41.0f/255 green:128.0f/255 blue:185.0f/255 alpha:1.0f]
cornerRadius:3];
// Add This Line
self.tableView.sectionHeaderHeight = 46.0f;
}

#pragma mark - Table View

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{ // Change This to Non Zero Number
return 100;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{ // Change This to Non Zero Number
return 1;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}


// NSDate *object = _objects[indexPath.row];
cell.textLabel.text = @"";
return cell;
}

static NSString *SectionHeaderIdentifier = @"SectionHeaderIdentifier";

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
SectionHeaderView *headerView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderIdentifier];
if (headerView == nil) {
headerView = [[SectionHeaderView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.frame), tableView.sectionHeaderHeight)];
}
[headerView setTitle:@"Title" subTitle:@"Subtitle" image:[UIImage imageNamed:@"search-icon-timeline-translucent@2x.png"]];
return headerView;
}

UIColor+LightAndDark.h


//
// UIColor+LightAndDark.h
// Lua
//
// Created by Kurry Tran on 12/24/12.
// Copyright (c) 2012 Lua Technologies. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIColor (LightAndDark)
- (UIColor *)lighterColor:(CGFloat)percent;
- (UIColor *)darkerColor:(CGFloat)percent;
@end

UIColor+LightAndDark.m


//
// UIColor+LightAndDark.m
// Lua
//
// Created by Kurry Tran on 12/24/12.
// Copyright (c) 2012 Lua Technologies. All rights reserved.
//

#import "UIColor+LightAndDark.h"

@implementation UIColor (LightAndDark)
//http://stackoverflow.com/questions/11598043/get-slightly-lighter-and-darker-color-from-uicolor

- (UIColor *)lighterColor:(CGFloat)percent
{
float h, s, b, a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
return [UIColor colorWithHue:h
saturation:s
brightness:MIN(b * (1+percent), 1.0)
alpha:a];
return nil;
}

- (UIColor *)darkerColor:(CGFloat)percent
{
float h, s, b, a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
return [UIColor colorWithHue:h
saturation:s
brightness:b * (1-percent)
alpha:a];
return nil;
}
@end

SectionHeaderView.h


//
// SectionHeaderView.h
// FastScrolling-UITableViews
//
// Created by Kurry L Tran on 6/26/13.
// Copyright (c) 2013 Kurry L Tran. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface SectionHeaderView : UIView
{
NSString *_title;
NSString *_subTitle;
UIImage *_image;
}
- (void)setTitle:(NSString *)title subTitle:(NSString *)subTitle;
- (void)setTitle:(NSString *)title subTitle:(NSString *)subTitle image:(UIImage *)image;

SectionHeaderView.m


//
// SectionHeaderView.m
// FastScrolling-UITableViews
//
// Created by Kurry L Tran on 6/26/13.
// Copyright (c) 2013 Kurry L Tran. All rights reserved.
//

#import "SectionHeaderView.h"
#import "UIColor+LightAndDark.h"
#import <QuartzCore/QuartzCore.h>

@implementation SectionHeaderView

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}

- (void)setTitle:(NSString *)title subTitle:(NSString *)subTitle
{
_title = title;
_subTitle = subTitle;
[self setNeedsDisplay];
}

- (void)setTitle:(NSString *)title subTitle:(NSString *)subTitle image:(UIImage *)image
{
_title = title;
_subTitle = subTitle;
_image = image;
[self setNeedsDisplay];

}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
// This Creates a White A Black to White Gradient Layer to Blend With the Solid Color
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
[gradientLayer setFrame:rect];
NSArray *colors = [NSArray arrayWithObjects:
(id)[[UIColor whiteColor] CGColor],
(id)[[[UIColor blackColor] colorWithAlphaComponent:1.0f] CGColor],
nil];
gradientLayer.colors = colors;
gradientLayer.opacity = 0.09;
[self.layer addSublayer:gradientLayer];

// This Generates Three Random Numbers between [0,1] to seed random color
float r = (float)rand()/(float)RAND_MAX;
float g = (float)rand()/(float)RAND_MAX;
float b = (float)rand()/(float)RAND_MAX;

UIColor *baseColor = [UIColor colorWithRed:r green:g blue:b alpha:1.0f];
UIColor *topBorderColor = [baseColor lighterColor:0.20];
UIColor *bottomBorderColor = [baseColor darkerColor:0.20];

// This Draws The Background Color
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, baseColor.CGColor);
CGContextFillRect(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
CGContextSaveGState(context);

// This Draws The Top Border Color
CGContextMoveToPoint(context, CGRectGetMinX(rect), 0);
CGContextAddLineToPoint(context, CGRectGetMaxX(rect), 0);
CGContextSetStrokeColorWithColor(context, topBorderColor.CGColor);
CGContextSetLineWidth(context, 1);
CGContextStrokePath(context);
CGContextRestoreGState(context);

CGContextSaveGState(context);

// This Draws The Bottom Border Color
CGContextMoveToPoint(context, CGRectGetMinX(rect), CGRectGetMaxY(rect));
CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMaxY(rect));
CGContextSetStrokeColorWithColor(context, bottomBorderColor.CGColor);
CGContextSetLineWidth(context, 1);
CGContextStrokePath(context);
CGContextRestoreGState(context);

CGRect titleLabelFrame = self.bounds;
titleLabelFrame.origin.x = 69.0;
titleLabelFrame.origin.y = 8.0;

static UIColor *titleColor;
titleColor = [UIColor whiteColor];
static UIColor *subTitleColor;
subTitleColor = [UIColor whiteColor];
[titleColor set];
CGContextSaveGState(context);
context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeNormal);

// Draws Title
[_title drawAtPoint:CGPointMake(titleLabelFrame.origin.x, titleLabelFrame.origin.y)
forWidth:200
withFont:[UIFont boldSystemFontOfSize:17]
fontSize:17
lineBreakMode:NSLineBreakByTruncatingTail
baselineAdjustment:UIBaselineAdjustmentAlignCenters];

// Draws SubTitle
[subTitleColor set];
[_subTitle drawAtPoint:CGPointMake(69, 25)
forWidth:200
withFont:[UIFont systemFontOfSize:13.0]
fontSize:13
lineBreakMode:NSLineBreakByTruncatingTail
baselineAdjustment:UIBaselineAdjustmentAlignCenters];

[_image drawInRect:CGRectMake(10.0, 10.0, 30.0, 28.0)];
}


@end


5. To custom draw fast tableview cells create a subclass of ABTableViewCell: https://github.com/enormego/ABTableViewCell, which draws the cell with core graphics. You should end up with something like this:
















ABTableViewCell.h


// Copyright (c) 2008 Loren Brichter
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// ABTableViewCell.h
//
// Created by Loren Brichter
// Copyright 2008 Loren Brichter. All rights reserved.
//

#import <UIKit/UIKit.h>

// to use: subclass ABTableViewCell and implement -drawContentView:
@interface ABTableViewCell : UITableViewCell
{
UIView *contentView;
}

- (void)drawContentView:(CGRect)r; // subclasses should implement

@end


ABTableViewCell.m


// Copyright (c) 2008 Loren Brichter
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// ABTableViewCell.m
//
// Created by Loren Brichter
// Copyright 2008 Loren Brichter. All rights reserved.
//

#import "ABTableViewCell.h"
@interface ABTableViewCellView : UIView
@end

@implementation ABTableViewCellView

- (void)drawRect:(CGRect)r
{
[(ABTableViewCell *)[self superview] drawContentView:r];
}

@end



@implementation ABTableViewCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
contentView = [[ABTableViewCellView alloc]initWithFrame:CGRectZero];
contentView.opaque = YES;
[self addSubview:contentView];
}
return self;
}


- (void)setFrame:(CGRect)f
{
[super setFrame:f];
CGRect b = [self bounds];
//b.size.height -= 1; // leave room for the seperator line
[contentView setFrame:b];
}

- (void)setNeedsDisplay
{
[super setNeedsDisplay];
[contentView setNeedsDisplay];
}

- (void)drawContentView:(CGRect)r
{
// subclasses should implement this
}

@end


KTTableViewCell.h


//
// KTTableViewCell.h
// FastScrolling-UITableViews
//
// Created by Kurry Tran on 6/27/13.
// Copyright (c) 2013 Kurry L Tran. All rights reserved.
//

#import "ABTableViewCell.h"

@interface KTTableViewCell : ABTableViewCell
{
NSString *_title;
NSString *_subTitle;
UIImage *_image;
}
- (void)setTitle:(NSString *)title subTitle:(NSString *)subtitle image:(UIImage *)image;
@end




//
// KTTableViewCell.m
// FastScrolling-UITableViews
//
// Created by Kurry Tran on 6/27/13.
// Copyright (c) 2013 Kurry L Tran. All rights reserved.
//

#import "KTTableViewCell.h"

@implementation KTTableViewCell

- (void)setTitle:(NSString *)title subTitle:(NSString *)subtitle image:(UIImage *)image
{
_title = title;
_subTitle = subtitle;
_image = image;
[self setNeedsDisplay];
}

-(void) drawContentView:(CGRect)r
{
static UIColor *textColor;
textColor = [UIColor blackColor];
static UIColor *borderColor;
borderColor = [UIColor colorWithRed:200.0f/255.0f green:200.0f/255.0f blue:200.0f/255.0f alpha:1.0f];
static UIColor *selectedColor;
selectedColor = [UIColor colorWithRed:212.0f/255.0f green:212.0f/255.0f blue:212.0f/255.0f alpha:1.0f];

CGContextRef context = UIGraphicsGetCurrentContext();

if(self.highlighted || self.selected)
{
r.origin.y -= 1.0f;
r.size.height += 1.0f;
CGContextSetFillColorWithColor(context, selectedColor.CGColor);
CGContextFillRect(context, CGRectMake(0, 0, CGRectGetWidth(r), CGRectGetMaxY(r)));
CGContextSaveGState(context);
}
else
{
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextFillRect(context, CGRectMake(0, 0, r.size.width, r.size.height));
CGContextSaveGState(context);

CGContextMoveToPoint(context, CGRectGetMinX(r), 0);
CGContextAddLineToPoint(context, CGRectGetMaxX(r), 0);
CGContextSetStrokeColorWithColor(context, borderColor.CGColor);
CGContextSetLineWidth(context, 1);
CGContextStrokePath(context);
CGContextRestoreGState(context);

CGContextSaveGState(context);

CGContextMoveToPoint(context, CGRectGetMinX(r), CGRectGetMaxY(r));
CGContextAddLineToPoint(context, CGRectGetMaxX(r), CGRectGetMaxY(r));
CGContextSetStrokeColorWithColor(context, borderColor.CGColor);
CGContextSetLineWidth(context, 1);
CGContextStrokePath(context);
CGContextRestoreGState(context);
[_image drawInRect:CGRectMake(5, 5, 45, 45)];
}

[textColor set];
[_title drawAtPoint:CGPointMake(65.0f, 7.0f)
forWidth:200
withFont:[UIFont boldSystemFontOfSize:17]
fontSize:17
lineBreakMode:NSLineBreakByTruncatingTail
baselineAdjustment:UIBaselineAdjustmentAlignCenters];

[_subTitle drawAtPoint:CGPointMake(65.0f, 28.0f)
forWidth:200
withFont:[UIFont systemFontOfSize:16.0f]
fontSize:16
lineBreakMode:NSLineBreakByTruncatingTail
baselineAdjustment:UIBaselineAdjustmentAlignCenters];

}
@end


// Add This At The Top
#import "KTTableViewCell.h"

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
[self.navigationController.navigationBar configureFlatNavigationBarWithColor:[UIColor colorWithRed:44.0f/255.0f green:71.0f/255.0f blue:98.0f/255.0f alpha:1.0f]];
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
[UIBarButtonItem configureFlatButtonsWithColor:[UIColor colorWithRed:52.0f/255.0f green:152.0f/255.0f blue:219.0f/255.0f alpha:1.0f]
highlightedColor:[UIColor colorWithRed:41.0f/255 green:128.0f/255 blue:185.0f/255 alpha:1.0f]
cornerRadius:3];

self.tableView.sectionHeaderHeight = 46.0f;
// Add This Line
self.tableView.rowHeight = 56.0f;
}

// Change this to your new subclass
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

KTTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[KTTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
[cell setTitle:@"Title" subTitle:@"Subtitle" image:[UIImage imageNamed:@"placeholder@2x.png"]];

// NSDate *object = _objects[indexPath.row];
cell.textLabel.text = @"";
return cell;
}


Full Source Code Here: http://db.tt/7E2EBbln