Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Initial commit

  • Loading branch information...
commit 0b7fc557a5faeddeb297d4d6c3be6803c388c144 0 parents
Sam Soffes authored November 07, 2010
7  .gitignore
... ...
@@ -0,0 +1,7 @@
  1
+.DS_Store
  2
+build
  3
+*.mode1v3
  4
+*.pbxuser
  5
+*.perspectivev3
  6
+*.xcworkspace
  7
+xcuserdata
3  .gitmodules
... ...
@@ -0,0 +1,3 @@
  1
+[submodule "Demo/SSToolkit"]
  2
+	path = Demo/SSToolkit
  3
+	url = git://github.com/samsoffes/sstoolkit.git
24  Classes/SSMessageTableViewCell.h
... ...
@@ -0,0 +1,24 @@
  1
+//
  2
+//  SSMessageTableViewCell.h
  3
+//  Messages
  4
+//
  5
+//  Created by Sam Soffes on 3/10/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+typedef enum {
  10
+	SSMessageTableViewCellMessageStyleGray = 0,
  11
+	SSMessageTableViewCellMessageStyleGreen = 1
  12
+} SSMessageTableViewCellMessageStyle;
  13
+
  14
+@class SSMessageTableViewCellBubbleView;
  15
+
  16
+@interface SSMessageTableViewCell : UITableViewCell {
  17
+
  18
+	SSMessageTableViewCellBubbleView *bubbleView;
  19
+}
  20
+
  21
+@property (nonatomic, copy) NSString *messageText;
  22
+@property (nonatomic, assign) SSMessageTableViewCellMessageStyle messageStyle;
  23
+
  24
+@end
58  Classes/SSMessageTableViewCell.m
... ...
@@ -0,0 +1,58 @@
  1
+//
  2
+//  SSMessageTableViewCell.m
  3
+//  Messages
  4
+//
  5
+//  Created by Sam Soffes on 3/10/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+#import "SSMessageTableViewCell.h"
  10
+#import "SSMessageTableViewCellBubbleView.h"
  11
+
  12
+@implementation SSMessageTableViewCell
  13
+
  14
+#pragma mark NSObject
  15
+
  16
+- (void)dealloc {
  17
+	[bubbleView release];
  18
+	[super dealloc];
  19
+}
  20
+
  21
+#pragma mark UITableViewCell
  22
+
  23
+- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
  24
+    if ((self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier])) {
  25
+		self.selectionStyle = UITableViewCellSelectionStyleNone;		
  26
+		self.textLabel.hidden = YES;
  27
+				
  28
+		bubbleView = [[SSMessageTableViewCellBubbleView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.contentView.frame.size.width, self.contentView.frame.size.height)];
  29
+		bubbleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  30
+		[self.contentView addSubview:bubbleView];
  31
+		[self.contentView sendSubviewToBack:bubbleView];
  32
+    }
  33
+    return self;
  34
+}
  35
+
  36
+#pragma mark Getters
  37
+
  38
+- (SSMessageTableViewCellMessageStyle)messageStyle {
  39
+	return bubbleView.messageStyle;
  40
+}
  41
+
  42
+
  43
+- (NSString *)messageText {
  44
+	return bubbleView.messageText;
  45
+}
  46
+
  47
+#pragma mark Setters
  48
+
  49
+- (void)setMessageStyle:(SSMessageTableViewCellMessageStyle)aMessageStyle {
  50
+	bubbleView.messageStyle = aMessageStyle;
  51
+}
  52
+
  53
+
  54
+- (void)setMessageText:(NSString *)text {
  55
+	bubbleView.messageText = text;
  56
+}
  57
+
  58
+@end
25  Classes/SSMessageTableViewCellBubbleView.h
... ...
@@ -0,0 +1,25 @@
  1
+//
  2
+//  SSMessageTableViewCellBubbleView.h
  3
+//  Messages
  4
+//
  5
+//  Created by Sam Soffes on 3/10/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+#import "SSMessageTableViewCell.h"
  10
+
  11
+@interface SSMessageTableViewCellBubbleView : UIView {
  12
+
  13
+	NSString *messageText;
  14
+	SSMessageTableViewCellMessageStyle messageStyle;
  15
+}
  16
+
  17
+@property (nonatomic, copy) NSString *messageText;
  18
+@property (nonatomic, assign) SSMessageTableViewCellMessageStyle messageStyle;
  19
+
  20
++ (UIImage *)bubbleImageForMessageStyle:(SSMessageTableViewCellMessageStyle)aMessageStyle;
  21
++ (CGSize)textSizeForText:(NSString *)text;
  22
++ (CGSize)bubbleSizeForText:(NSString *)text;
  23
++ (CGFloat)cellHeightForText:(NSString *)text;
  24
+
  25
+@end
74  Classes/SSMessageTableViewCellBubbleView.m
... ...
@@ -0,0 +1,74 @@
  1
+//
  2
+//  SSMessageTableViewCellBubbleView.m
  3
+//  Messages
  4
+//
  5
+//  Created by Sam Soffes on 3/10/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+#import "SSMessageTableViewCellBubbleView.h"
  10
+
  11
+#define kFont [UIFont systemFontOfSize:15.0]
  12
+static UILineBreakMode kLineBreakMode = UILineBreakModeWordWrap;
  13
+static CGFloat kMaxWidth = 223.0; // TODO: Make dynamic
  14
+static CGFloat kPaddingTop = 6.0;
  15
+static CGFloat kPaddingBottom = 8.0;
  16
+static CGFloat kMarginTop = 2.0;
  17
+static CGFloat kMarginBottom = 2.0;
  18
+
  19
+@implementation SSMessageTableViewCellBubbleView
  20
+
  21
+@synthesize messageText;
  22
+@synthesize messageStyle;
  23
+
  24
+#pragma mark Class Methods
  25
+
  26
++ (UIImage *)bubbleImageForMessageStyle:(SSMessageTableViewCellMessageStyle)aMessageStyle {
  27
+	UIImage *image;
  28
+	if (aMessageStyle == SSMessageTableViewCellMessageStyleGreen) {
  29
+		image = [[UIImage imageNamed:@"SSMessageTableViewCellBackgroundGreen.png"] stretchableImageWithLeftCapWidth:17 topCapHeight:14];
  30
+	} else {
  31
+		image = [[UIImage imageNamed:@"SSMessageTableViewCellBackgroundGray.png"] stretchableImageWithLeftCapWidth:24 topCapHeight:14];
  32
+	}
  33
+	return image;
  34
+}
  35
+
  36
+
  37
++ (CGSize)textSizeForText:(NSString *)text {
  38
+	CGSize maxSize = CGSizeMake(kMaxWidth - 38.0, 1000.0);
  39
+	return [text sizeWithFont:kFont constrainedToSize:maxSize lineBreakMode:kLineBreakMode];
  40
+}
  41
+
  42
+
  43
++ (CGSize)bubbleSizeForText:(NSString *)text {
  44
+	CGSize textSize = [self textSizeForText:text];
  45
+	return CGSizeMake(textSize.width + 38.0, textSize.height + kPaddingTop + kPaddingBottom);
  46
+}
  47
+
  48
+
  49
++ (CGFloat)cellHeightForText:(NSString *)text {
  50
+	return [self bubbleSizeForText:text].height + kMarginTop + kMarginBottom;
  51
+}
  52
+
  53
+#pragma mark UIView
  54
+
  55
+- (id)initWithFrame:(CGRect)frame {
  56
+	if (self = [super initWithFrame:frame]) {
  57
+		self.backgroundColor = [UIColor colorWithRed:0.859 green:0.886 blue:0.929 alpha:1.0];
  58
+	}
  59
+	return self;
  60
+}
  61
+
  62
+
  63
+- (void)drawRect:(CGRect)frame {
  64
+	UIImage *bubbleImage = [[self class] bubbleImageForMessageStyle:messageStyle];
  65
+	CGSize bubbleSize = [[self class] bubbleSizeForText:messageText];
  66
+	CGRect bubbleFrame = CGRectMake((messageStyle == SSMessageTableViewCellMessageStyleGreen ? self.frame.size.width - bubbleSize.width : 0.0), kMarginTop, bubbleSize.width, bubbleSize.height);
  67
+	[bubbleImage drawInRect:bubbleFrame];
  68
+	
  69
+	CGSize textSize = [[self class] textSizeForText:messageText];
  70
+	CGRect textFrame = CGRectMake(((messageStyle == SSMessageTableViewCellMessageStyleGreen) ? (13.0 + bubbleFrame.origin.x) : 23.0), kPaddingTop + kMarginTop, textSize.width, textSize.height);
  71
+	[messageText drawInRect:textFrame withFont:kFont lineBreakMode:kLineBreakMode alignment:(messageStyle == SSMessageTableViewCellMessageStyleGreen) ? UITextAlignmentRight : UITextAlignmentLeft];
  72
+}
  73
+
  74
+@end
30  Classes/SSMessagesViewController.h
... ...
@@ -0,0 +1,30 @@
  1
+//
  2
+//  SSMessagesViewController.h
  3
+//  Messages
  4
+//
  5
+//	This is an abstract class for displaying a UI similar
  6
+//	to Apple's SMS application. A subclass should
  7
+//	override the messageStyleForRowAtIndexPath: and
  8
+//	textForRowAtIndexPath: to customize this class.
  9
+//
  10
+//  Created by Sam Soffes on 3/10/10.
  11
+//  Copyright 2010 Sam Soffes. All rights reserved.
  12
+//
  13
+
  14
+#import "SSMessageTableViewCell.h"
  15
+
  16
+@class SSGradientView;
  17
+
  18
+@interface SSMessagesViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate> {
  19
+
  20
+	UITableView *_tableView;
  21
+	SSGradientView *_inputView;
  22
+	UIButton *_sendButton;
  23
+}
  24
+
  25
+@property (nonatomic, retain, readonly) UITableView *tableView;
  26
+
  27
+- (SSMessageTableViewCellMessageStyle)messageStyleForRowAtIndexPath:(NSIndexPath *)indexPath;
  28
+- (NSString *)textForRowAtIndexPath:(NSIndexPath *)indexPath;
  29
+
  30
+@end
161  Classes/SSMessagesViewController.m
... ...
@@ -0,0 +1,161 @@
  1
+//
  2
+//  SSMessagesViewController.m
  3
+//  Messages
  4
+//
  5
+//  Created by Sam Soffes on 3/10/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+#import "SSMessagesViewController.h"
  10
+#import "SSMessageTableViewCell.h"
  11
+#import "SSMessageTableViewCellBubbleView.h"
  12
+#import <SSToolkit/SSGradientView.h>
  13
+#import <SSToolkit/SSTextField.h>
  14
+
  15
+CGFloat kInputHeight = 40.0;
  16
+
  17
+@implementation SSMessagesViewController
  18
+
  19
+@synthesize tableView = _tableView;
  20
+
  21
+#pragma mark NSObject
  22
+
  23
+- (id)init {
  24
+	return [self initWithNibName:nil bundle:nil];
  25
+}
  26
+
  27
+
  28
+- (void)dealloc {
  29
+	[_tableView release];
  30
+	[_inputView release];
  31
+	[_sendButton release];
  32
+	[super dealloc];
  33
+}
  34
+
  35
+
  36
+#pragma mark UITableViewController
  37
+
  38
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  39
+    if (self = [super initWithNibName:nil bundle:nil]) {
  40
+		self.view.backgroundColor = [UIColor colorWithRed:0.859 green:0.886 blue:0.929 alpha:1.0];
  41
+		
  42
+		// Table view
  43
+		_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height - kInputHeight) style:UITableViewStylePlain];
  44
+		_tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  45
+		_tableView.backgroundColor = self.view.backgroundColor;
  46
+		_tableView.dataSource = self;
  47
+		_tableView.delegate = self;
  48
+		_tableView.separatorColor = self.view.backgroundColor;
  49
+		[self.view addSubview:_tableView];
  50
+		
  51
+		// Input
  52
+		_inputView = [[SSGradientView alloc] initWithFrame:CGRectMake(0.0, self.view.frame.size.height - kInputHeight, self.view.frame.size.width, kInputHeight)];
  53
+		_inputView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
  54
+		_inputView.hasBottomBorder = NO;
  55
+		_inputView.topBorderColor = [UIColor colorWithRed:0.733 green:0.741 blue:0.745 alpha:1.0];
  56
+		_inputView.topColor = [UIColor colorWithRed:0.914 green:0.922 blue:0.929 alpha:1.0];
  57
+		_inputView.bottomColor = [UIColor colorWithRed:0.765 green:0.773 blue:0.788 alpha:1.0];
  58
+		[self.view addSubview:_inputView];
  59
+		
  60
+		// Text field
  61
+		SSTextField *textField = [[SSTextField alloc] initWithFrame:CGRectMake(6.0, 8.0, self.view.frame.size.width - 75.0, 27.0)];
  62
+		textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  63
+		textField.background = [[UIImage imageNamed:@"SSMessagesViewControllerTextFieldBackground.png"] stretchableImageWithLeftCapWidth:12 topCapHeight:0];
  64
+		textField.delegate = self;
  65
+		textField.font = [UIFont systemFontOfSize:15.0];
  66
+		textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
  67
+		textField.textInsets = UIEdgeInsetsMake(0.0, 12.0, 0.0, 12.0);
  68
+		[_inputView addSubview:textField];
  69
+		[textField release];
  70
+		
  71
+		// Send button
  72
+		_sendButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
  73
+		_sendButton.frame = CGRectMake(self.view.frame.size.width - 65.0, 8.0, 59.0, 27.0);
  74
+		_sendButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
  75
+		_sendButton.titleLabel.font = [UIFont boldSystemFontOfSize:16.0];
  76
+		_sendButton.titleLabel.shadowOffset = CGSizeMake(0.0, -1.0);
  77
+		[_sendButton setBackgroundImage:[[UIImage imageNamed:@"SSMessagesViewControllerSendButtonBackground.png"] stretchableImageWithLeftCapWidth:12 topCapHeight:0] forState:UIControlStateNormal];
  78
+		[_sendButton setTitle:@"Send" forState:UIControlStateNormal];
  79
+		[_sendButton setTitleColor:[UIColor colorWithWhite:1.0 alpha:0.4] forState:UIControlStateNormal];
  80
+		[_sendButton setTitleShadowColor:[UIColor colorWithRed:0.325 green:0.463 blue:0.675 alpha:1.0] forState:UIControlStateNormal];
  81
+		[_inputView addSubview:_sendButton];
  82
+    }
  83
+    return self;
  84
+}
  85
+
  86
+
  87
+#pragma mark SSMessagesViewController
  88
+
  89
+// This method is intended to be overridden by subclasses
  90
+- (SSMessageTableViewCellMessageStyle)messageStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
  91
+	return SSMessageTableViewCellMessageStyleGray;
  92
+}
  93
+
  94
+
  95
+// This method is intended to be overridden by subclasses
  96
+- (NSString *)textForRowAtIndexPath:(NSIndexPath *)indexPath {
  97
+	return nil;
  98
+}
  99
+
  100
+
  101
+#pragma mark UITableViewDataSource
  102
+
  103
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  104
+    return 1;
  105
+}
  106
+
  107
+
  108
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  109
+    return 0;
  110
+}
  111
+
  112
+
  113
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  114
+    
  115
+    static NSString *cellIdentifier = @"cellIdentifier";
  116
+    
  117
+    SSMessageTableViewCell *cell = (SSMessageTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  118
+    if (cell == nil) {
  119
+        cell = [[[SSMessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
  120
+    }
  121
+	
  122
+    cell.messageStyle = [self messageStyleForRowAtIndexPath:indexPath];
  123
+	cell.messageText = [self textForRowAtIndexPath:indexPath];
  124
+	
  125
+    return cell;
  126
+}
  127
+
  128
+
  129
+#pragma mark UITableViewDelegate
  130
+
  131
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  132
+	return [SSMessageTableViewCellBubbleView cellHeightForText:[self textForRowAtIndexPath:indexPath]];
  133
+}
  134
+
  135
+
  136
+#pragma mark UITextFieldDelegate
  137
+
  138
+- (void)textFieldDidBeginEditing:(UITextField *)textField {
  139
+	[UIView beginAnimations:@"beginEditing" context:_inputView];
  140
+	[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
  141
+	[UIView setAnimationDuration:0.3];
  142
+	_tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 216.0, 0.0);
  143
+	_tableView.scrollIndicatorInsets = _tableView.contentInset;
  144
+	_inputView.frame = CGRectMake(0.0, 160.0, self.view.frame.size.width, kInputHeight);
  145
+	[_sendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  146
+	[UIView commitAnimations];
  147
+}
  148
+
  149
+
  150
+- (void)textFieldDidEndEditing:(UITextField *)textField {
  151
+	[UIView beginAnimations:@"endEditing" context:_inputView];
  152
+	[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
  153
+	[UIView setAnimationDuration:0.3];
  154
+	_tableView.contentInset = UIEdgeInsetsZero;
  155
+	_tableView.scrollIndicatorInsets = UIEdgeInsetsZero;
  156
+	_inputView.frame = CGRectMake(0.0, _tableView.frame.size.height, self.view.frame.size.width, kInputHeight);
  157
+	[_sendButton setTitleColor:[UIColor colorWithWhite:1.0 alpha:0.4] forState:UIControlStateNormal];
  158
+	[UIView commitAnimations];
  159
+}
  160
+
  161
+@end
15  Demo/Classes/MDAppDelegate.h
... ...
@@ -0,0 +1,15 @@
  1
+//
  2
+//  MDAppDelegate.h
  3
+//  Messages Demo
  4
+//
  5
+//  Created by Sam Soffes on 11/7/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+@interface MDAppDelegate : NSObject <UIApplicationDelegate> {
  10
+
  11
+    UIWindow *_window;
  12
+}
  13
+
  14
+@end
  15
+
38  Demo/Classes/MDAppDelegate.m
... ...
@@ -0,0 +1,38 @@
  1
+//
  2
+//  MDAppDelegate.m
  3
+//  Messages Demo
  4
+//
  5
+//  Created by Sam Soffes on 11/7/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+#import "MDAppDelegate.h"
  10
+#import "MDDemoViewController.h"
  11
+
  12
+@implementation MDAppDelegate
  13
+
  14
+#pragma mark NSObject
  15
+
  16
+- (void)dealloc {
  17
+    [_window release];
  18
+    [super dealloc];
  19
+}
  20
+
  21
+
  22
+#pragma mark UIApplicationDelegate
  23
+
  24
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
  25
+    MDDemoViewController *viewController = [[MDDemoViewController alloc] init];
  26
+	UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
  27
+	[viewController release];
  28
+	
  29
+	_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  30
+	_window.rootViewController = navigationController;
  31
+	[_window makeKeyAndVisible];
  32
+	
  33
+	[navigationController release];
  34
+    
  35
+    return YES;
  36
+}
  37
+
  38
+@end
15  Demo/Classes/MDDemoViewController.h
... ...
@@ -0,0 +1,15 @@
  1
+//
  2
+//  MDDemoViewController.h
  3
+//  Messages Demo
  4
+//
  5
+//  Created by Sam Soffes on 11/7/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+#import "SSMessagesViewController.h"
  10
+
  11
+@interface MDDemoViewController : SSMessagesViewController {
  12
+
  13
+}
  14
+
  15
+@end
61  Demo/Classes/MDDemoViewController.m
... ...
@@ -0,0 +1,61 @@
  1
+//
  2
+//  MDDemoViewController.m
  3
+//  Messages Demo
  4
+//
  5
+//  Created by Sam Soffes on 11/7/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+#import "MDDemoViewController.h"
  10
+#import "SSMessageTableViewCell.h"
  11
+
  12
+@implementation MDDemoViewController
  13
+
  14
+NSString *lorem[] = {
  15
+	@"Hi",
  16
+	@"This is a work in progress",
  17
+	@"Ya I know",
  18
+	@"Fine then\nI see how it is",
  19
+	@"Do you? Do you really?",
  20
+	@"Yes"
  21
+};
  22
+
  23
+#pragma mark UIViewController
  24
+
  25
+- (void)viewDidLoad {
  26
+	[super viewDidLoad];
  27
+	self.title = @"Messages";
  28
+}
  29
+
  30
+
  31
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
  32
+	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
  33
+		return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
  34
+	}
  35
+	return YES;
  36
+}
  37
+
  38
+
  39
+#pragma mark SSMessagesViewController
  40
+
  41
+- (SSMessageTableViewCellMessageStyle)messageStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
  42
+	if (indexPath.row % 2) {
  43
+		return SSMessageTableViewCellMessageStyleGreen;
  44
+	}
  45
+	return SSMessageTableViewCellMessageStyleGray;
  46
+}
  47
+
  48
+
  49
+- (NSString *)textForRowAtIndexPath:(NSIndexPath *)indexPath {
  50
+	return lorem[indexPath.row];
  51
+}
  52
+
  53
+
  54
+#pragma mark UITableViewDataSource
  55
+
  56
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  57
+    return sizeof(lorem) / sizeof(NSString *);
  58
+}
  59
+
  60
+
  61
+@end
355  Demo/Messages Demo.xcodeproj/project.pbxproj
... ...
@@ -0,0 +1,355 @@
  1
+// !$*UTF8*$!
  2
+{
  3
+	archiveVersion = 1;
  4
+	classes = {
  5
+	};
  6
+	objectVersion = 45;
  7
+	objects = {
  8
+
  9
+/* Begin PBXBuildFile section */
  10
+		1D3623260D0F684500981E51 /* MDAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* MDAppDelegate.m */; };
  11
+		1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
  12
+		1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
  13
+		1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
  14
+		288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
  15
+		B27D0FC912878A3300B58D1D /* MDDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B27D0FC812878A3300B58D1D /* MDDemoViewController.m */; };
  16
+		B27D0FD412878AA300B58D1D /* SSMessagesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B27D0FCF12878AA300B58D1D /* SSMessagesViewController.m */; };
  17
+		B27D0FD512878AA300B58D1D /* SSMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B27D0FD112878AA300B58D1D /* SSMessageTableViewCell.m */; };
  18
+		B27D0FD612878AA300B58D1D /* SSMessageTableViewCellBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = B27D0FD312878AA300B58D1D /* SSMessageTableViewCellBubbleView.m */; };
  19
+		B27D0FDC12878AAB00B58D1D /* SSMessagesViewControllerSendButtonBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = B27D0FD812878AAB00B58D1D /* SSMessagesViewControllerSendButtonBackground.png */; };
  20
+		B27D0FDD12878AAB00B58D1D /* SSMessagesViewControllerTextFieldBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = B27D0FD912878AAB00B58D1D /* SSMessagesViewControllerTextFieldBackground.png */; };
  21
+		B27D0FDE12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGray.png in Resources */ = {isa = PBXBuildFile; fileRef = B27D0FDA12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGray.png */; };
  22
+		B27D0FDF12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = B27D0FDB12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGreen.png */; };
  23
+		B27D0FF012878B2200B58D1D /* SSToolkit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B27D0FEF12878B2200B58D1D /* SSToolkit.bundle */; };
  24
+		B27D0FFA12878B2700B58D1D /* libTWToolkit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B27D0FEE12878B1900B58D1D /* libTWToolkit.a */; };
  25
+/* End PBXBuildFile section */
  26
+
  27
+/* Begin PBXContainerItemProxy section */
  28
+		B27D0FED12878B1900B58D1D /* PBXContainerItemProxy */ = {
  29
+			isa = PBXContainerItemProxy;
  30
+			containerPortal = B27D0FE412878B1900B58D1D /* SSToolkit.xcodeproj */;
  31
+			proxyType = 2;
  32
+			remoteGlobalIDString = D2AAC07E0554694100DB518D /* libTWToolkit.a */;
  33
+			remoteInfo = SSToolkit;
  34
+		};
  35
+		B27D0FFB12878B2D00B58D1D /* PBXContainerItemProxy */ = {
  36
+			isa = PBXContainerItemProxy;
  37
+			containerPortal = B27D0FE412878B1900B58D1D /* SSToolkit.xcodeproj */;
  38
+			proxyType = 1;
  39
+			remoteGlobalIDString = D2AAC07D0554694100DB518D /* SSToolkit */;
  40
+			remoteInfo = SSToolkit;
  41
+		};
  42
+/* End PBXContainerItemProxy section */
  43
+
  44
+/* Begin PBXFileReference section */
  45
+		1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
  46
+		1D3623240D0F684500981E51 /* MDAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDAppDelegate.h; sourceTree = "<group>"; };
  47
+		1D3623250D0F684500981E51 /* MDAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MDAppDelegate.m; sourceTree = "<group>"; };
  48
+		1D6058910D05DD3D006BFB54 /* Messages Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Messages Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
  49
+		1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
  50
+		288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
  51
+		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
  52
+		32CA4F630368D1EE00C91783 /* Messages_Demo_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Messages_Demo_Prefix.pch; sourceTree = "<group>"; };
  53
+		8D1107310486CEB800E47090 /* Messages_Demo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Messages_Demo-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
  54
+		B27D0FC712878A3300B58D1D /* MDDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDDemoViewController.h; sourceTree = "<group>"; };
  55
+		B27D0FC812878A3300B58D1D /* MDDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MDDemoViewController.m; sourceTree = "<group>"; };
  56
+		B27D0FCE12878AA300B58D1D /* SSMessagesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSMessagesViewController.h; path = ../../../../../Code/samsoffes/ssmessagesviewcontroller/Classes/SSMessagesViewController.h; sourceTree = "<group>"; };
  57
+		B27D0FCF12878AA300B58D1D /* SSMessagesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SSMessagesViewController.m; path = ../../../../../Code/samsoffes/ssmessagesviewcontroller/Classes/SSMessagesViewController.m; sourceTree = "<group>"; };
  58
+		B27D0FD012878AA300B58D1D /* SSMessageTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSMessageTableViewCell.h; path = ../../../../../Code/samsoffes/ssmessagesviewcontroller/Classes/SSMessageTableViewCell.h; sourceTree = "<group>"; };
  59
+		B27D0FD112878AA300B58D1D /* SSMessageTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SSMessageTableViewCell.m; path = ../../../../../Code/samsoffes/ssmessagesviewcontroller/Classes/SSMessageTableViewCell.m; sourceTree = "<group>"; };
  60
+		B27D0FD212878AA300B58D1D /* SSMessageTableViewCellBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSMessageTableViewCellBubbleView.h; path = ../../../../../Code/samsoffes/ssmessagesviewcontroller/Classes/SSMessageTableViewCellBubbleView.h; sourceTree = "<group>"; };
  61
+		B27D0FD312878AA300B58D1D /* SSMessageTableViewCellBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SSMessageTableViewCellBubbleView.m; path = ../../../../../Code/samsoffes/ssmessagesviewcontroller/Classes/SSMessageTableViewCellBubbleView.m; sourceTree = "<group>"; };
  62
+		B27D0FD812878AAB00B58D1D /* SSMessagesViewControllerSendButtonBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = SSMessagesViewControllerSendButtonBackground.png; sourceTree = "<group>"; };
  63
+		B27D0FD912878AAB00B58D1D /* SSMessagesViewControllerTextFieldBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = SSMessagesViewControllerTextFieldBackground.png; sourceTree = "<group>"; };
  64
+		B27D0FDA12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = SSMessageTableViewCellBackgroundGray.png; sourceTree = "<group>"; };
  65
+		B27D0FDB12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = SSMessageTableViewCellBackgroundGreen.png; sourceTree = "<group>"; };
  66
+		B27D0FE412878B1900B58D1D /* SSToolkit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SSToolkit.xcodeproj; path = ../../../../../Code/samsoffes/ssmessagesviewcontroller/Demo/SSToolkit/SSToolkit.xcodeproj; sourceTree = "<group>"; };
  67
+		B27D0FEF12878B2200B58D1D /* SSToolkit.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = SSToolkit.bundle; path = ../../../../Code/samsoffes/ssmessagesviewcontroller/Demo/SSToolkit/Resources/SSToolkit.bundle; sourceTree = "<group>"; };
  68
+/* End PBXFileReference section */
  69
+
  70
+/* Begin PBXFrameworksBuildPhase section */
  71
+		1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
  72
+			isa = PBXFrameworksBuildPhase;
  73
+			buildActionMask = 2147483647;
  74
+			files = (
  75
+				1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
  76
+				1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
  77
+				288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
  78
+				B27D0FFA12878B2700B58D1D /* libTWToolkit.a in Frameworks */,
  79
+			);
  80
+			runOnlyForDeploymentPostprocessing = 0;
  81
+		};
  82
+/* End PBXFrameworksBuildPhase section */
  83
+
  84
+/* Begin PBXGroup section */
  85
+		080E96DDFE201D6D7F000001 /* Classes */ = {
  86
+			isa = PBXGroup;
  87
+			children = (
  88
+				B27D0FE412878B1900B58D1D /* SSToolkit.xcodeproj */,
  89
+				1D3623240D0F684500981E51 /* MDAppDelegate.h */,
  90
+				1D3623250D0F684500981E51 /* MDAppDelegate.m */,
  91
+				B27D0FC712878A3300B58D1D /* MDDemoViewController.h */,
  92
+				B27D0FC812878A3300B58D1D /* MDDemoViewController.m */,
  93
+				B27D0FCE12878AA300B58D1D /* SSMessagesViewController.h */,
  94
+				B27D0FCF12878AA300B58D1D /* SSMessagesViewController.m */,
  95
+				B27D0FD012878AA300B58D1D /* SSMessageTableViewCell.h */,
  96
+				B27D0FD112878AA300B58D1D /* SSMessageTableViewCell.m */,
  97
+				B27D0FD212878AA300B58D1D /* SSMessageTableViewCellBubbleView.h */,
  98
+				B27D0FD312878AA300B58D1D /* SSMessageTableViewCellBubbleView.m */,
  99
+			);
  100
+			path = Classes;
  101
+			sourceTree = "<group>";
  102
+		};
  103
+		19C28FACFE9D520D11CA2CBB /* Products */ = {
  104
+			isa = PBXGroup;
  105
+			children = (
  106
+				1D6058910D05DD3D006BFB54 /* Messages Demo.app */,
  107
+			);
  108
+			name = Products;
  109
+			sourceTree = "<group>";
  110
+		};
  111
+		29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
  112
+			isa = PBXGroup;
  113
+			children = (
  114
+				080E96DDFE201D6D7F000001 /* Classes */,
  115
+				29B97315FDCFA39411CA2CEA /* Other Sources */,
  116
+				29B97317FDCFA39411CA2CEA /* Resources */,
  117
+				29B97323FDCFA39411CA2CEA /* Frameworks */,
  118
+				19C28FACFE9D520D11CA2CBB /* Products */,
  119
+			);
  120
+			name = CustomTemplate;
  121
+			sourceTree = "<group>";
  122
+		};
  123
+		29B97315FDCFA39411CA2CEA /* Other Sources */ = {
  124
+			isa = PBXGroup;
  125
+			children = (
  126
+				32CA4F630368D1EE00C91783 /* Messages_Demo_Prefix.pch */,
  127
+				29B97316FDCFA39411CA2CEA /* main.m */,
  128
+			);
  129
+			name = "Other Sources";
  130
+			sourceTree = "<group>";
  131
+		};
  132
+		29B97317FDCFA39411CA2CEA /* Resources */ = {
  133
+			isa = PBXGroup;
  134
+			children = (
  135
+				B27D0FD712878AAB00B58D1D /* Images */,
  136
+				B27D0FEF12878B2200B58D1D /* SSToolkit.bundle */,
  137
+				8D1107310486CEB800E47090 /* Messages_Demo-Info.plist */,
  138
+			);
  139
+			name = Resources;
  140
+			sourceTree = "<group>";
  141
+		};
  142
+		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
  143
+			isa = PBXGroup;
  144
+			children = (
  145
+				1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
  146
+				1D30AB110D05D00D00671497 /* Foundation.framework */,
  147
+				288765FC0DF74451002DB57D /* CoreGraphics.framework */,
  148
+			);
  149
+			name = Frameworks;
  150
+			sourceTree = "<group>";
  151
+		};
  152
+		B27D0FD712878AAB00B58D1D /* Images */ = {
  153
+			isa = PBXGroup;
  154
+			children = (
  155
+				B27D0FD812878AAB00B58D1D /* SSMessagesViewControllerSendButtonBackground.png */,
  156
+				B27D0FD912878AAB00B58D1D /* SSMessagesViewControllerTextFieldBackground.png */,
  157
+				B27D0FDA12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGray.png */,
  158
+				B27D0FDB12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGreen.png */,
  159
+			);
  160
+			name = Images;
  161
+			path = ../../../../Code/samsoffes/ssmessagesviewcontroller/Images;
  162
+			sourceTree = "<group>";
  163
+		};
  164
+		B27D0FEA12878B1900B58D1D /* Products */ = {
  165
+			isa = PBXGroup;
  166
+			children = (
  167
+				B27D0FEE12878B1900B58D1D /* libTWToolkit.a */,
  168
+			);
  169
+			name = Products;
  170
+			sourceTree = "<group>";
  171
+		};
  172
+/* End PBXGroup section */
  173
+
  174
+/* Begin PBXNativeTarget section */
  175
+		1D6058900D05DD3D006BFB54 /* Messages Demo */ = {
  176
+			isa = PBXNativeTarget;
  177
+			buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Messages Demo" */;
  178
+			buildPhases = (
  179
+				1D60588D0D05DD3D006BFB54 /* Resources */,
  180
+				1D60588E0D05DD3D006BFB54 /* Sources */,
  181
+				1D60588F0D05DD3D006BFB54 /* Frameworks */,
  182
+			);
  183
+			buildRules = (
  184
+			);
  185
+			dependencies = (
  186
+				B27D0FFC12878B2D00B58D1D /* PBXTargetDependency */,
  187
+			);
  188
+			name = "Messages Demo";
  189
+			productName = "Messages Demo";
  190
+			productReference = 1D6058910D05DD3D006BFB54 /* Messages Demo.app */;
  191
+			productType = "com.apple.product-type.application";
  192
+		};
  193
+/* End PBXNativeTarget section */
  194
+
  195
+/* Begin PBXProject section */
  196
+		29B97313FDCFA39411CA2CEA /* Project object */ = {
  197
+			isa = PBXProject;
  198
+			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Messages Demo" */;
  199
+			compatibilityVersion = "Xcode 3.1";
  200
+			developmentRegion = English;
  201
+			hasScannedForEncodings = 1;
  202
+			knownRegions = (
  203
+				English,
  204
+				Japanese,
  205
+				French,
  206
+				German,
  207
+			);
  208
+			mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
  209
+			projectDirPath = "";
  210
+			projectReferences = (
  211
+				{
  212
+					ProductGroup = B27D0FEA12878B1900B58D1D /* Products */;
  213
+					ProjectRef = B27D0FE412878B1900B58D1D /* SSToolkit.xcodeproj */;
  214
+				},
  215
+			);
  216
+			projectRoot = "";
  217
+			targets = (
  218
+				1D6058900D05DD3D006BFB54 /* Messages Demo */,
  219
+			);
  220
+		};
  221
+/* End PBXProject section */
  222
+
  223
+/* Begin PBXReferenceProxy section */
  224
+		B27D0FEE12878B1900B58D1D /* libTWToolkit.a */ = {
  225
+			isa = PBXReferenceProxy;
  226
+			fileType = archive.ar;
  227
+			path = libTWToolkit.a;
  228
+			remoteRef = B27D0FED12878B1900B58D1D /* PBXContainerItemProxy */;
  229
+			sourceTree = BUILT_PRODUCTS_DIR;
  230
+		};
  231
+/* End PBXReferenceProxy section */
  232
+
  233
+/* Begin PBXResourcesBuildPhase section */
  234
+		1D60588D0D05DD3D006BFB54 /* Resources */ = {
  235
+			isa = PBXResourcesBuildPhase;
  236
+			buildActionMask = 2147483647;
  237
+			files = (
  238
+				B27D0FDC12878AAB00B58D1D /* SSMessagesViewControllerSendButtonBackground.png in Resources */,
  239
+				B27D0FDD12878AAB00B58D1D /* SSMessagesViewControllerTextFieldBackground.png in Resources */,
  240
+				B27D0FDE12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGray.png in Resources */,
  241
+				B27D0FDF12878AAB00B58D1D /* SSMessageTableViewCellBackgroundGreen.png in Resources */,
  242
+				B27D0FF012878B2200B58D1D /* SSToolkit.bundle in Resources */,
  243
+			);
  244
+			runOnlyForDeploymentPostprocessing = 0;
  245
+		};
  246
+/* End PBXResourcesBuildPhase section */
  247
+
  248
+/* Begin PBXSourcesBuildPhase section */
  249
+		1D60588E0D05DD3D006BFB54 /* Sources */ = {
  250
+			isa = PBXSourcesBuildPhase;
  251
+			buildActionMask = 2147483647;
  252
+			files = (
  253
+				1D60589B0D05DD56006BFB54 /* main.m in Sources */,
  254
+				1D3623260D0F684500981E51 /* MDAppDelegate.m in Sources */,
  255
+				B27D0FC912878A3300B58D1D /* MDDemoViewController.m in Sources */,
  256
+				B27D0FD412878AA300B58D1D /* SSMessagesViewController.m in Sources */,
  257
+				B27D0FD512878AA300B58D1D /* SSMessageTableViewCell.m in Sources */,
  258
+				B27D0FD612878AA300B58D1D /* SSMessageTableViewCellBubbleView.m in Sources */,
  259
+			);
  260
+			runOnlyForDeploymentPostprocessing = 0;
  261
+		};
  262
+/* End PBXSourcesBuildPhase section */
  263
+
  264
+/* Begin PBXTargetDependency section */
  265
+		B27D0FFC12878B2D00B58D1D /* PBXTargetDependency */ = {
  266
+			isa = PBXTargetDependency;
  267
+			name = SSToolkit;
  268
+			targetProxy = B27D0FFB12878B2D00B58D1D /* PBXContainerItemProxy */;
  269
+		};
  270
+/* End PBXTargetDependency section */
  271
+
  272
+/* Begin XCBuildConfiguration section */
  273
+		1D6058940D05DD3E006BFB54 /* Debug */ = {
  274
+			isa = XCBuildConfiguration;
  275
+			buildSettings = {
  276
+				ALWAYS_SEARCH_USER_PATHS = NO;
  277
+				COPY_PHASE_STRIP = NO;
  278
+				GCC_DYNAMIC_NO_PIC = NO;
  279
+				GCC_OPTIMIZATION_LEVEL = 0;
  280
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
  281
+				GCC_PREFIX_HEADER = Messages_Demo_Prefix.pch;
  282
+				HEADER_SEARCH_PATHS = SSToolkit;
  283
+				INFOPLIST_FILE = "Messages_Demo-Info.plist";
  284
+				IPHONEOS_DEPLOYMENT_TARGET = 3.1.3;
  285
+				PRODUCT_NAME = "Messages Demo";
  286
+			};
  287
+			name = Debug;
  288
+		};
  289
+		1D6058950D05DD3E006BFB54 /* Release */ = {
  290
+			isa = XCBuildConfiguration;
  291
+			buildSettings = {
  292
+				ALWAYS_SEARCH_USER_PATHS = NO;
  293
+				COPY_PHASE_STRIP = YES;
  294
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
  295
+				GCC_PREFIX_HEADER = Messages_Demo_Prefix.pch;
  296
+				HEADER_SEARCH_PATHS = SSToolkit;
  297
+				INFOPLIST_FILE = "Messages_Demo-Info.plist";
  298
+				IPHONEOS_DEPLOYMENT_TARGET = 3.1.3;
  299
+				PRODUCT_NAME = "Messages Demo";
  300
+				VALIDATE_PRODUCT = YES;
  301
+			};
  302
+			name = Release;
  303
+		};
  304
+		C01FCF4F08A954540054247B /* Debug */ = {
  305
+			isa = XCBuildConfiguration;
  306
+			buildSettings = {
  307
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
  308
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  309
+				GCC_C_LANGUAGE_STANDARD = c99;
  310
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
  311
+				GCC_WARN_UNUSED_VARIABLE = YES;
  312
+				PREBINDING = NO;
  313
+				SDKROOT = iphoneos;
  314
+			};
  315
+			name = Debug;
  316
+		};
  317
+		C01FCF5008A954540054247B /* Release */ = {
  318
+			isa = XCBuildConfiguration;
  319
+			buildSettings = {
  320
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
  321
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  322
+				GCC_C_LANGUAGE_STANDARD = c99;
  323
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
  324
+				GCC_WARN_UNUSED_VARIABLE = YES;
  325
+				OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
  326
+				PREBINDING = NO;
  327
+				SDKROOT = iphoneos;
  328
+			};
  329
+			name = Release;
  330
+		};
  331
+/* End XCBuildConfiguration section */
  332
+
  333
+/* Begin XCConfigurationList section */
  334
+		1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Messages Demo" */ = {
  335
+			isa = XCConfigurationList;
  336
+			buildConfigurations = (
  337
+				1D6058940D05DD3E006BFB54 /* Debug */,
  338
+				1D6058950D05DD3E006BFB54 /* Release */,
  339
+			);
  340
+			defaultConfigurationIsVisible = 0;
  341
+			defaultConfigurationName = Release;
  342
+		};
  343
+		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Messages Demo" */ = {
  344
+			isa = XCConfigurationList;
  345
+			buildConfigurations = (
  346
+				C01FCF4F08A954540054247B /* Debug */,
  347
+				C01FCF5008A954540054247B /* Release */,
  348
+			);
  349
+			defaultConfigurationIsVisible = 0;
  350
+			defaultConfigurationName = Release;
  351
+		};
  352
+/* End XCConfigurationList section */
  353
+	};
  354
+	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
  355
+}
28  Demo/Messages_Demo-Info.plist
... ...
@@ -0,0 +1,28 @@
  1
+<?xml version="1.0" encoding="UTF-8"?>
  2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3
+<plist version="1.0">
  4
+<dict>
  5
+	<key>CFBundleDevelopmentRegion</key>
  6
+	<string>English</string>
  7
+	<key>CFBundleDisplayName</key>
  8
+	<string>${PRODUCT_NAME}</string>
  9
+	<key>CFBundleExecutable</key>
  10
+	<string>${EXECUTABLE_NAME}</string>
  11
+	<key>CFBundleIconFile</key>
  12
+	<string></string>
  13
+	<key>CFBundleIdentifier</key>
  14
+	<string>com.samsoffes.ssmessagesviewcontroller.demo</string>
  15
+	<key>CFBundleInfoDictionaryVersion</key>
  16
+	<string>6.0</string>
  17
+	<key>CFBundleName</key>
  18
+	<string>${PRODUCT_NAME}</string>
  19
+	<key>CFBundlePackageType</key>
  20
+	<string>APPL</string>
  21
+	<key>CFBundleSignature</key>
  22
+	<string>????</string>
  23
+	<key>CFBundleVersion</key>
  24
+	<string>1.0</string>
  25
+	<key>LSRequiresIPhoneOS</key>
  26
+	<true/>
  27
+</dict>
  28
+</plist>
14  Demo/Messages_Demo_Prefix.pch
... ...
@@ -0,0 +1,14 @@
  1
+//
  2
+//  Messages_Demo_Prefix.pch
  3
+//  Messages Demo
  4
+//
  5
+//  Created by Sam Soffes on 11/7/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+//  Prefix header for all source files of the 'Messages Demo' target in the 'Messages Demo' project
  9
+//
  10
+
  11
+#ifdef __OBJC__
  12
+    #import <Foundation/Foundation.h>
  13
+    #import <UIKit/UIKit.h>
  14
+#endif
1  Demo/SSToolkit
... ...
@@ -0,0 +1 @@
  1
+Subproject commit 2a6faca7400fc9243ee5b8c7394b47c3828b4d32
15  Demo/main.m
... ...
@@ -0,0 +1,15 @@
  1
+//
  2
+//  main.m
  3
+//  Messages Demo
  4
+//
  5
+//  Created by Sam Soffes on 11/7/10.
  6
+//  Copyright 2010 Sam Soffes. All rights reserved.
  7
+//
  8
+
  9
+int main(int argc, char *argv[]) {
  10
+    
  11
+    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  12
+    int retVal = UIApplicationMain(argc, argv, nil, @"MDAppDelegate");
  13
+    [pool release];
  14
+    return retVal;
  15
+}
BIN  Images/SSMessageTableViewCellBackgroundGray.png
BIN  Images/SSMessageTableViewCellBackgroundGreen.png
BIN  Images/SSMessagesViewControllerSendButtonBackground.png
BIN  Images/SSMessagesViewControllerTextFieldBackground.png

0 notes on commit 0b7fc55

Please sign in to comment.
Something went wrong with that request. Please try again.