自定义不等高cell

2015-11-18  本文已影响289人  今夜子辰

<h1 id="toc_0">自定义不等高cell</h1>

<h1 id="toc_1">自定义不等高cell(纯代码)</h1>

<h2 id="toc_2">给模型增加frame数据</h2>

<ul>
<li>所有子控件的frame</li>
<li>cell的高度</li>
</ul>

<pre><code class="language-objc">@interface XMGStatus : NSObject
/**** 文字\图片数据 ****/
// .....

/**** frame数据 ****/
/** 头像的frame /
@property (nonatomic, assign) CGRect iconFrame;
// .....
/
* cell的高度 */
@property (nonatomic, assign) CGFloat cellHeight;
@end
</code></pre>

<ul>
<li>重写模型cellHeight属性的get方法</li>
</ul>

<pre><code class="language-objc">- (CGFloat)cellHeight
{
if (_cellHeight == 0) {
// ... 计算所有子控件的frame、cell的高度
}
return _cellHeight;
}
</code></pre>

<h2 id="toc_3">在控制器中</h2>

<ul>
<li>实现一个返回cell高度的代理方法

<ul>
<li>在这个方法中返回indexPath位置对应cell的高度</li>
</ul></li>
</ul>

<pre><code class="language-objc">/**

<ul>
<li>给cell传递模型数据</li>
</ul>

<pre><code class="language-objc">- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"tg";
// 访问缓存池
XMGStatusCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

// 设置数据(传递模型数据)
cell.status = self.statuses[indexPath.row];

return cell;

}
</code></pre>

<h2 id="toc_4">新建一个继承自<code>UITableViewCell</code>的子类,比如XMGStatusCell</h2>

<pre><code class="language-objc">@interface XMGStatusCell : UITableViewCell
@end
</code></pre>

<h2 id="toc_5">在XMGStatusCell.m文件中</h2>

<ul>
<li>重写<code>-initWithStyle:reuseIdentifier:</code>方法

<ul>
<li>在这个方法中添加所有需要显示的子控件</li>
<li>给子控件做一些初始化设置(设置字体、文字颜色等)</li>
</ul></li>
</ul>

<pre><code class="language-objc">/**

<h2 id="toc_6">在XMGStatusCell.h文件中提供一个模型属性,比如XMGTg模型</h2>

<pre><code class="language-objc">@class XMGStatus;

@interface XMGStatusCell : UITableViewCell
/** 团购模型数据 */
@property (nonatomic, strong) XMGStatus *status;
@end
</code></pre>

<h2 id="toc_7">在XMGTgCell.m中重写模型属性的set方法</h2>

<ul>
<li>在set方法中给子控件设置模型数据</li>
</ul>

<pre><code class="language-objc">- (void)setStatus:(XMGStatus *)status
{
_status = status;

// .......

}
</code></pre>

<h2 id="toc_8">重写<code>-layoutSubviews</code>方法</h2>

<ul>
<li>一定要调用<code>[super layoutSubviews]</code></li>
<li>在这个方法中设置所有子控件的frame</li>
</ul>

<pre><code class="language-objc">/**

<h1 id="toc_9">自定义不等高cell(Autolayout)</h1>

上一篇 下一篇

猜你喜欢

热点阅读