-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNICollectionViewCellFactory.html
200 lines (190 loc) · 14.9 KB
/
NICollectionViewCellFactory.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
<!-- 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: NICollectionViewCellFactory 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('NICollectionViewCellFactory.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-methods">Tasks</a> |
<a href="classNICollectionViewCellFactory-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">NICollectionViewCellFactory Class Reference<div class="ingroups"><a class="el" href="CollectionViewCellFactory.html">Collection View 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 collection view cells from objects. </p>
<p>This factory provides a single method that accepts an object and returns a UICollectionViewCell for use in a UICollectionView. A cell will only be returned if the object passed to the factory conforms to the <a class="el" href="NICollectionViewCellObject.html" title="A light-weight implementation of the NICollectionViewCellObject protocol. ">NICollectionViewCellObject</a> protocol. The created cell should ideally conform to the <a class="el" href="NICollectionViewCell-Protocol.html" title="The protocol for a cell created in the NICollectionViewCellFactory. ">NICollectionViewCell</a> protocol. If it does, the object will be passed to it via <a class="el" href="NICollectionViewCell-Protocol.html#shouldUpdateCellWithObject:">shouldUpdateCellWithObject:</a> before the factory method returns.</p>
<p>This factory is designed to be used with <a class="el" href="NICollectionViewModel.html" title="A non-mutable collection view model that complies to the UICollectionViewDataSource protocol...">NICollectionViewModel</a>, though one could easily use it with other collection view data source implementations simply by providing nil for the collection view model argument.</p>
<p>If you instantiate an <a class="el" href="NICollectionViewCellFactory.html" title="A simple factory for creating collection view cells from objects. ">NICollectionViewCellFactory</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="NICollectionViewCell-Protocol.html" title="The protocol for a cell created in the NICollectionViewCellFactory. ">NICollectionViewCell</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 NICollectionViewCellFactory:</div>
<div class="dyncontent">
<div class="center">
<img src="NICollectionViewCellFactory.png" usemap="#NICollectionViewCellFactory_map" alt=""/>
<map id="NICollectionViewCellFactory_map" name="NICollectionViewCellFactory_map">
<area href="NICollectionViewModelDelegate-Protocol.html" title="A protocol for NICollectionViewModel to fetch rows to be displayed for the collection view..." alt="<NICollectionViewModelDelegate>" shape="rect" coords="0,0,207,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:collectionViewModel:cellForCollectionView:atIndexPath:withObject:"><td class="memItemLeft" align="right" valign="top">(UICollectionViewCell *) </td><td class="memItemRight" valign="bottom">+ <a class="el" href="NICollectionViewCellFactory.html#collectionViewModel:cellForCollectionView:atIndexPath:withObject:">collectionViewModel:cellForCollectionView:atIndexPath:withObject:</a></td></tr>
<tr class="separator:collectionViewModel:cellForCollectionView: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="NICollectionViewCellFactory.html#mapObjectClass:toCellClass:">mapObjectClass:toCellClass:</a></td></tr>
<tr class="separator:mapObjectClass:toCellClass:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:collectionViewCellClassForItemAtIndexPath:model:"><td class="memItemLeft" align="right" valign="top">(Class) </td><td class="memItemRight" valign="bottom">- <a class="el" href="NICollectionViewCellFactory.html#collectionViewCellClassForItemAtIndexPath:model:">collectionViewCellClassForItemAtIndexPath:model:</a></td></tr>
<tr class="separator:collectionViewCellClassForItemAtIndexPath:model:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:collectionViewCellClassForItemAtIndexPath:model:"><td class="memItemLeft" align="right" valign="top">(Class) </td><td class="memItemRight" valign="bottom">+ <a class="el" href="NICollectionViewCellFactory.html#collectionViewCellClassForItemAtIndexPath:model:">collectionViewCellClassForItemAtIndexPath:model:</a></td></tr>
<tr class="separator:collectionViewCellClassForItemAtIndexPath:model:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:collectionViewModel:collectionView:viewForSupplementaryElementOfKind:atIndexPath:"><td class="memItemLeft" align="right" valign="top">(UICollectionReusableView *) </td><td class="memItemRight" valign="bottom">- <a class="el" href="NICollectionViewModelDelegate-Protocol.html#collectionViewModel:collectionView:viewForSupplementaryElementOfKind:atIndexPath:">collectionViewModel:collectionView:viewForSupplementaryElementOfKind:atIndexPath:</a></td></tr>
<tr class="separator:collectionViewModel:collectionView:viewForSupplementaryElementOfKind:atIndexPath:"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<h2 class="groupheader">Method Documentation</h2>
<a class="anchor" id="collectionViewModel:cellForCollectionView:atIndexPath:withObject:"></a>
<div class="memitem">
<h3 class="memname">collectionViewModel:cellForCollectionView: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="NICollectionViewCellObject.html" title="A light-weight implementation of the NICollectionViewCellObject protocol. ">NICollectionViewCellObject</a> protocol. </p>
<div class="declaration">
+ (UICollectionViewCell*)collectionViewModel:(<a class="el" href="NICollectionViewModel.html">NICollectionViewModel</a> *)collectionViewModel cellForCollectionView:(UICollectionView *)collectionView atIndexPath:(NSIndexPath *)indexPath withObject:(id)object;</td></tr>
</div>
<h5>Discussion</h5>
<p>This method signature matches the <a class="el" href="NICollectionViewModelDelegate-Protocol.html" title="A protocol for NICollectionViewModel to fetch rows to be displayed for the collection view...">NICollectionViewModelDelegate</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="NICollectionViewCellFactory.html">NICollectionViewCellFactory</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">- (UICollectionViewCell *)collectionViewModel:(<a class="code" href="NICollectionViewModel.html">NICollectionViewModel</a> *)collectionViewModel</div>
<div class="line"> cellForCollectionView:(UICollectionView *)collectionView</div>
<div class="line"> atIndexPath:(NSIndexPath *)indexPath</div>
<div class="line"> withObject:(id)<span class="keywordtype">object</span> {</div>
<div class="line"> UICollectionViewCell* cell = [<a class="code" href="NICollectionViewCellFactory.html">NICollectionViewCellFactory</a> collectionViewModel:collectionViewModel</div>
<div class="line"> cellForCollectionView:collectionView</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="NICollectionViewModelDelegate-Protocol.html#collectionViewModel:cellForCollectionView:atIndexPath:withObject:"><NICollectionViewModelDelegate></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)collectionViewCellClass;</td></tr>
</div>
<h5>Discussion</h5>
<p>If an object implements the <a class="el" href="NICollectionViewCell-Protocol.html" title="The protocol for a cell created in the NICollectionViewCellFactory. ">NICollectionViewCell</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="collectionViewCellClassForItemAtIndexPath:model:"></a>
<div class="memitem">
<h3 class="memname">collectionViewCellClassForItemAtIndexPath:model:</h3>
<div class="memdoc">
<p class="abstract">Returns the mapped cell class for an object at a given index path. </p>
<div class="declaration">
- (Class)collectionViewCellClassForItemAtIndexPath:(NSIndexPath *)indexPath model:(<a class="el" href="NICollectionViewModel.html">NICollectionViewModel</a> *)model;</td></tr>
</div>
<h5>Discussion</h5>
<p>Explicitly mapped classes in the receiver take precedence over implicitly mapped classes.</p>
<p>This method is helpful when implementing layout calculation methods for your collection view. You can fetch the cell class and then perform any selectors that are necessary for calculating the dimensions of the cell before it is instantiated. </p>
</div>
</div>
<a class="anchor" id="collectionViewCellClassForItemAtIndexPath:model:"></a>
<div class="memitem">
<h3 class="memname">collectionViewCellClassForItemAtIndexPath:model:</h3>
<div class="memdoc">
<p class="abstract">Returns the mapped cell class for an object at a given index path. </p>
<div class="declaration">
+ (Class)collectionViewCellClassForItemAtIndexPath:(NSIndexPath *)indexPath model:(<a class="el" href="NICollectionViewModel.html">NICollectionViewModel</a> *)model;</td></tr>
</div>
<h5>Discussion</h5>
<p>This method is helpful when implementing layout calculation methods for your collection view. You can fetch the cell class and then perform any selectors that are necessary for calculating the dimensions of the cell before it is instantiated. </p>
</div>
</div>
<a class="anchor" id="collectionViewModel:collectionView:viewForSupplementaryElementOfKind:atIndexPath:"></a>
<div class="memitem">
<h3 class="memname">collectionViewModel:collectionView:viewForSupplementaryElementOfKind:atIndexPath:</h3>
<div class="memdoc">
<p class="abstract">Fetches a supplementary collection view element at a given indexPath. </p>
<div class="declaration">
- (UICollectionReusableView*)collectionViewModel:(<a class="el" href="NICollectionViewModel.html">NICollectionViewModel</a> *)collectionViewModel collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;</td></tr>
</div>
<h5>Discussion</h5>
<p>The value of the kind property and indexPath are implementation-dependent based on the type of UICollectionViewLayout being used. </p>
</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>