/
SimpleTableViewController.m
132 lines (108 loc) · 4.14 KB
/
SimpleTableViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//
// SimpleTableViewController.m
// TableViewModel
//
// Created by Luke Redpath on 09/08/2010.
// Copyright 2010 LJR Software Limited. All rights reserved.
//
#import "SimpleTableViewController.h"
#import "SimpleObject.h"
#import "SimpleTableModel.h"
#import "GithubRepositories.h"
@implementation SimpleTableViewController
- (void)dealloc
{
[sortOrderControl release];
[tableModel release];
[super dealloc];
}
- (SimpleTableModel *)tableModel
{
if (tableModel == nil) {
tableModel = [[SimpleTableModel alloc] initWithCellProvider:self];
[tableModel addTableModelListener:self];
}
return tableModel;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self configureToolbarItems];
self.title = @"Simple Table View";
self.tableView.rowHeight = 65;
self.tableView.dataSource = self.tableModel;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)];
[self.navigationItem setRightBarButtonItem:addButton];
[addButton release];
NSMutableArray *objects = [NSMutableArray array];
[[GithubRepositories exampleRepositories] enumerateObjectsUsingBlock:^(id repository, NSUInteger idx, BOOL *stop) {
SimpleObject *object = [[SimpleObject alloc] initWithTitle:[repository objectForKey:@"name"] description:[repository objectForKey:@"description"]];
[objects addObject:object];
[object release];
}];
[self.tableModel setObjects:objects];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setToolbarHidden:NO animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController setToolbarHidden:YES animated:YES];
}
- (void)configureToolbarItems;
{
NSMutableArray *items = [NSMutableArray array];
if (sortOrderControl == nil) {
sortOrderControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Unsorted", @"Sort Asc", @"Sort Desc", nil]];
sortOrderControl.segmentedControlStyle = UISegmentedControlStyleBar;
sortOrderControl.selectedSegmentIndex = self.tableModel.sortOrder;
[sortOrderControl addTarget:self action:@selector(sortOrderControlChanged:) forControlEvents:UIControlEventValueChanged];
}
[items addObject:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease]];
[items addObject:[[[UIBarButtonItem alloc] initWithCustomView:sortOrderControl] autorelease]];
[items addObject:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease]];
self.toolbarItems = items;
}
- (void)addButtonTapped:(id)sender
{
SimpleObject *object = [[SimpleObject alloc] initWithTitle:@"A new object" description:[NSString stringWithFormat:@"This was created at %@", [NSDate date]]];
[self.tableModel insertObject:object atIndex:0];
[object release];
}
- (void)sortOrderControlChanged:(UISegmentedControl *)control
{
[self.tableModel setSortOrder:control.selectedSegmentIndex];
}
#pragma mark -
#pragma mark LRTableModelEventListener methods
- (void)tableModelChanged:(LRTableModelEvent *)changeEvent
{
switch (changeEvent.type) {
case LRTableModelRefreshDataEvent:
[self.tableView reloadData];
break;
case LRTableModelInsertRowEvent:
[self.tableView insertRowsAtIndexPaths:changeEvent.indexPaths withRowAnimation:UITableViewRowAnimationTop];
break;
default:
[self.tableView reloadData];
break;
}
}
#pragma mark -
#pragma mark LRTableModelCellProvider methods
- (UITableViewCell *)cellForObjectAtIndexPath:(NSIndexPath *)indexPath reuseIdentifier:(NSString *)reuseIdentifier
{
return [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier] autorelease];
}
- (void)configureCell:(UITableViewCell *)cell forObject:(id)object atIndexPath:(NSIndexPath *)indexPath
{
SimpleObject *simpleObject = object;
cell.detailTextLabel.numberOfLines = 2;
cell.textLabel.text = simpleObject.title;
cell.detailTextLabel.text = simpleObject.description;
}
@end