-
Notifications
You must be signed in to change notification settings - Fork 0
/
NICellFactory.html
211 lines (203 loc) · 15 KB
/
NICellFactory.html
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6-nimbuskit"/>
<title>NimbusKit: NICellFactory Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="appledocs.css" rel="stylesheet" type="text/css"/>
<link href="nimbuskit.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-24278774-1']);
_gaq.push(['_setDomainName', 'nimbuskit.info']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<a href="index.html"><img style="float:left" src="nimbus128.png" width="80" height="80" /></a>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">NimbusKit
 <span id="projectnumber">1.2.1 - <a href="http://github.com/jverkoey/nimbus">Fork Nimbus on Github</a> - <a href="http://wiki.nimbuskit.info/">Visit the Nimbus Wiki</a></span>
</div>
<div id="projectbrief">The iOS framework that grows only as fast as its documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6-nimbuskit -->
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('NICellFactory.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-methods">Tasks</a> |
<a href="classNICellFactory-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">NICellFactory Class Reference<div class="ingroups"><a class="el" href="TableCellFactory.html">Table Cell Factory</a></div></div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<div class="textblock"><p>A simple factory for creating table view cells from objects. </p>
<p>This factory provides a single method that accepts an object and returns a UITableViewCell for use in a UITableView. A cell will only be returned if the object passed to the factory conforms to the <a class="el" href="NICellObject.html" title="A light-weight implementation of the NICellObject protocol. ">NICellObject</a> protocol. The created cell should ideally conform to the <a class="el" href="NICell-Protocol.html" title="The protocol for a cell created in the NICellFactory. ">NICell</a> protocol. If it does, the object will be passed to it via <a class="el" href="NICell-Protocol.html#shouldUpdateCellWithObject:">shouldUpdateCellWithObject:</a> before the factory method returns.</p>
<p>This factory is designed to be used with NITableViewModels, though one could easily use it with other table view data source implementations simply by providing nil for the table view model.</p>
<p>If you instantiate an <a class="el" href="NICellFactory.html" title="A simple factory for creating table view cells from objects. ">NICellFactory</a> then you can provide explicit mappings from objects to cells. This is helpful if the effort required to implement the <a class="el" href="NICell-Protocol.html" title="The protocol for a cell created in the NICellFactory. ">NICell</a> protocol on an object outweighs the benefit of using the factory, i.e. when you want to map simple types such as NSString to cells. </p>
</div><div class="dynheader">
Inheritance diagram for NICellFactory:</div>
<div class="dyncontent">
<div class="center">
<img src="NICellFactory.png" usemap="#NICellFactory_map" alt=""/>
<map id="NICellFactory_map" name="NICellFactory_map">
<area href="NITableViewModelDelegate-Protocol.html" title="A protocol for NITableViewModel to fetch rows to be displayed for the table view. ..." alt="<NITableViewModelDelegate>" shape="rect" coords="0,0,182,24"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Tasks</h2></td></tr>
<tr class="memitem:tableViewModel:cellForTableView:atIndexPath:withObject:"><td class="memItemLeft" align="right" valign="top">(UITableViewCell *) </td><td class="memItemRight" valign="bottom">+ <a class="el" href="NICellFactory.html#tableViewModel:cellForTableView:atIndexPath:withObject:">tableViewModel:cellForTableView:atIndexPath:withObject:</a></td></tr>
<tr class="separator:tableViewModel:cellForTableView:atIndexPath:withObject:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:mapObjectClass:toCellClass:"><td class="memItemLeft" align="right" valign="top">(void) </td><td class="memItemRight" valign="bottom">- <a class="el" href="NICellFactory.html#mapObjectClass:toCellClass:">mapObjectClass:toCellClass:</a></td></tr>
<tr class="separator:mapObjectClass:toCellClass:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:tableView:heightForRowAtIndexPath:model:"><td class="memItemLeft" align="right" valign="top">(CGFloat) </td><td class="memItemRight" valign="bottom">- <a class="el" href="NICellFactory.html#tableView:heightForRowAtIndexPath:model:">tableView:heightForRowAtIndexPath:model:</a></td></tr>
<tr class="separator:tableView:heightForRowAtIndexPath:model:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:tableView:heightForRowAtIndexPath:model:"><td class="memItemLeft" align="right" valign="top">(CGFloat) </td><td class="memItemRight" valign="bottom">+ <a class="el" href="NICellFactory.html#tableView:heightForRowAtIndexPath:model:">tableView:heightForRowAtIndexPath:model:</a></td></tr>
<tr class="separator:tableView:heightForRowAtIndexPath:model:"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<h2 class="groupheader">Method Documentation</h2>
<a class="anchor" id="tableViewModel:cellForTableView:atIndexPath:withObject:"></a>
<div class="memitem">
<h3 class="memname">tableViewModel:cellForTableView:atIndexPath:withObject:</h3>
<div class="memdoc">
<p class="abstract">Creates a cell from a given object if and only if the object conforms to the <a class="el" href="NICellObject.html" title="A light-weight implementation of the NICellObject protocol. ">NICellObject</a> protocol. </p>
<div class="declaration">
+ (UITableViewCell*)tableViewModel:(<a class="el" href="NITableViewModel.html">NITableViewModel</a> *)tableViewModel cellForTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath withObject:(id)object;</td></tr>
</div>
<h5>Discussion</h5>
<p>This method signature matches the <a class="el" href="NITableViewModelDelegate-Protocol.html" title="A protocol for NITableViewModel to fetch rows to be displayed for the table view. ...">NITableViewModelDelegate</a> method so that you can set this factory as the model's delegate:</p>
<div class="fragment"><div class="line"><span class="comment">// Must cast to id to avoid compiler warnings.</span></div>
<div class="line">_model.delegate = (id)[<a class="code" href="NICellFactory.html">NICellFactory</a> <span class="keyword">class</span>];</div>
</div><!-- fragment --><p>If you would like to customize the factory's output, implement the model's delegate method and call the factory method. Remember that if the factory doesn't know how to map the object to a cell it will return nil.</p>
<div class="fragment"><div class="line">- (UITableViewCell *)tableViewModel:(<a class="code" href="NITableViewModel.html">NITableViewModel</a> *)tableViewModel</div>
<div class="line"> cellForTableView:(UITableView *)tableView</div>
<div class="line"> atIndexPath:(NSIndexPath *)indexPath</div>
<div class="line"> withObject:(id)<span class="keywordtype">object</span> {</div>
<div class="line"> UITableViewCell* cell = [<a class="code" href="NICellFactory.html">NICellFactory</a> tableViewModel:tableViewModel</div>
<div class="line"> cellForTableView:tableView</div>
<div class="line"> atIndexPath:indexPath</div>
<div class="line"> withObject:object];</div>
<div class="line"> <span class="keywordflow">if</span> (nil == cell) {</div>
<div class="line"> <span class="comment">// Custom cell creation here.</span></div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">return</span> cell;</div>
<div class="line">}</div>
</div><!-- fragment -->
<p>Reimplemented from <a class="el" href="NITableViewModelDelegate-Protocol.html#tableViewModel:cellForTableView:atIndexPath:withObject:"><NITableViewModelDelegate></a>.</p>
</div>
</div>
<a class="anchor" id="mapObjectClass:toCellClass:"></a>
<div class="memitem">
<h3 class="memname">mapObjectClass:toCellClass:</h3>
<div class="memdoc">
<p class="abstract">Map an object's class to a cell's class. </p>
<div class="declaration">
- (void)mapObjectClass:(Class)objectClass toCellClass:(Class)cellClass;</td></tr>
</div>
<h5>Discussion</h5>
<p>If an object implements the <a class="el" href="NICell-Protocol.html" title="The protocol for a cell created in the NICellFactory. ">NICell</a> protocol AND is found in this factory mapping, the factory mapping will take precedence. This allows you to explicitly override the mapping on a case-by-case basis. </p>
</div>
</div>
<a class="anchor" id="tableView:heightForRowAtIndexPath:model:"></a>
<div class="memitem">
<h3 class="memname">tableView:heightForRowAtIndexPath:model:</h3>
<div class="memdoc">
<p class="abstract">Returns the height for a row at a given index path. </p>
<div class="declaration">
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath model:(<a class="el" href="NITableViewModel.html">NITableViewModel</a> *)model;</td></tr>
</div>
<h5>Discussion</h5>
<p>Uses the heightForObject:atIndexPath:tableView: selector from the <a class="el" href="NICell-Protocol.html" title="The protocol for a cell created in the NICellFactory. ">NICell</a> protocol to ask the object at indexPath in the model what its height should be. If a class mapping has been made for the given object in this factory then that class mapping will be used over the result of cellClass from the <a class="el" href="NICellObject.html" title="A light-weight implementation of the NICellObject protocol. ">NICellObject</a> protocol.</p>
<p>If the cell returns a height of zero then tableView.rowHeight will be used.</p>
<p>Example implementation:</p>
<div class="fragment"><div class="line">- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {</div>
<div class="line"> <span class="keywordflow">return</span> [<span class="keyword">self</span>.cellFactory tableView:tableView heightForRowAtIndexPath:indexPath model:<span class="keyword">self</span>.model];</div>
<div class="line">}</div>
</div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tableView</td><td>The table view within which the cell exists. </td></tr>
<tr><td class="paramname">indexPath</td><td>The location of the cell in the table view. </td></tr>
<tr><td class="paramname">model</td><td>The backing model being used by the table view. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The height of the cell mapped to the object at indexPath, if it implements heightForObject:atIndexPath:tableView:; otherwise, returns tableView.rowHeight. </dd></dl>
</div>
</div>
<a class="anchor" id="tableView:heightForRowAtIndexPath:model:"></a>
<div class="memitem">
<h3 class="memname">tableView:heightForRowAtIndexPath:model:</h3>
<div class="memdoc">
<p class="abstract">Returns the height for a row at a given index path. </p>
<div class="declaration">
+ (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath model:(<a class="el" href="NITableViewModel.html">NITableViewModel</a> *)model;</td></tr>
</div>
<h5>Discussion</h5>
<p>Uses the heightForObject:atIndexPath:tableView: selector from the <a class="el" href="NICell-Protocol.html" title="The protocol for a cell created in the NICellFactory. ">NICell</a> protocol to ask the object at indexPath in the model what its height should be. Only implicit mappings will be checked with this static implementation. If you would like to provide explicit mappings you must create an instance of <a class="el" href="NICellFactory.html" title="A simple factory for creating table view cells from objects. ">NICellFactory</a>.</p>
<p>If the cell returns a height of zero then tableView.rowHeight will be used.</p>
<p>Example implementation:</p>
<div class="fragment"><div class="line">- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {</div>
<div class="line"> <span class="keywordflow">return</span> [<a class="code" href="NICellFactory.html">NICellFactory</a> tableView:tableView heightForRowAtIndexPath:indexPath model:<span class="keyword">self</span>.model];</div>
<div class="line">}</div>
</div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tableView</td><td>The table view within which the cell exists. </td></tr>
<tr><td class="paramname">indexPath</td><td>The location of the cell in the table view. </td></tr>
<tr><td class="paramname">model</td><td>The backing model being used by the table view. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The height of the cell mapped to the object at indexPath, if it implements heightForObject:atIndexPath:tableView:; otherwise, returns tableView.rowHeight. </dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.6-->
<!-- start footer part -->
<script type="text/javascript" src="widget.js"></script>
</body>
</html>