做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头。

在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上会有一定的不同

tableView

1.纯代码自定义cell,直接用init方法自定义,然后在UITableViewCell* 里面自己根据标识加载

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

self =[super initWithStyle:style reuseIdentifier:reuseIdentifier];

if (self) {

[self initSubview];

}

return  self;

}

-(void)initSubview{

_monthLabel = [[UILabel alloc]init];

[self.contentView addSubview:_monthLabel];

_moneyLabel=[[UILabel alloc]init];

[self.contentView addSubview:_moneyLabel];

_sepLineView = [[UIView alloc]init];

[self.contentView addSubview:_sepLineView];

}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString*cellID = @"ProperTableViewCell";

ProperTableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:cellID];

if (cell==nil) {

cell = [[ProperTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

}

2.用了xib拖线自定义cell

xib拖线自定义需要注意点:在vc中加载时需要注册

[_tableView registerNib:[UINib nibWithNibName:[ ProperTableViewCell class] bundle:nil] forCellReuseIdentifier:@"ProperTableViewCell"];

或者

//注册headerView Nib的view需要继承UICollectionReusableView

[self.collectionView registerNib:[UINib nibWithNibName:@"ProductItemCell" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ProductItemCell"];

然后根据标识找到对应的cell

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString*cellID = @"ProperTableViewCell";

ProperTableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:cellID];

if (cell==nil) {

cell = [[ProperTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

}

3.如果cell是用xib自定义的,在cell的加载那里注册之后,可以用nib的方法来加载

static NSString * CellIdentifier = @"ProductItemCell";

if(!nibri)

{

UINib *nib = [UINib nibWithNibName:@"ProductItemCell" bundle:nil];

[self.collectionView registerNib:nib forCellWithReuseIdentifier:CellIdentifier];

nibri =YES;

}

ProductItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

4.注意collectionView和tableView的混合使用

collectionView和tableview 的混合使用时,需要数据实时刷新,如果重用数据的话需要用nib方式加载,不然会出现数据错乱情况

用下面这种方法来创建cell

// 重用数据会用的是缓存池的数据没有刷新,但是tableviewcell每次滚动时数据会重用,所以不能用标识重用

NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"hangyeCell" owner:nil options:nil];

hangyeCell *cell = [nib objectAtIndex:0];

ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用的更多相关文章

  1. WinForm中自定义搜索框(水印、清空按钮、加载中图标)

    public partial class CustomSearchBar : TextBox { private readonly Label lblwaterText = new Label(); ...

  2. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  3. 关于ligerui 中 grid 表格的扩展搜索功能在远程数据加载时无法使用的解决办法

    要想使用grid里的扩展搜索功能,除了要引用ligerui主要的js文件外,还必须引入下面的JS文件: 1.Source\demos\filter\ligerGrid.showFilter.js 2. ...

  4. win7/8系统中php5.3和5.4、5.5不能加载php_curl.dll解决办法

    win7/8系统中php5.3和5.4.5.5不能加载php_curl.dll解决办法   作者:用户 来源:互联网 时间:2016-06-23 18:54:33 php变量注释系统模块 摘要: 本文 ...

  5. 在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据

    在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据 如今,最流行的拍照设备智能手机可以捕获高达4K UHD的图像(3840×2160图像),原始数据超过25 MB.即使 ...

  6. ios中自定义cell 设置cell的分组结构

    ios系统默认的cell并不能满足我们的需求 这个时候就需要自定义我们的cell 自定义cell为分组的时候 需要设置分组样式  以下是我常用分组的二种方法: 第一是 在自定义的UITableView ...

  7. iOS中 自定义cell分割线/分割线偏移 韩俊强的博客

    在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...

  8. iOS中自定义UITableViewCell的用法

    1.先创建一个View继承 UITableViewCell并使用xib快速建立模型. #import <UIKit/UIKit.h> #import "Score.h" ...

  9. Nib加载的方式实现自定义TableView

    实现的效果 实现原理: 通过在主界面中用Bundle 的LoadNib的方式进行自定义窗体文件加载并渲染界面 实现步骤 Step One 创建TableViewCell 窗体 Step Two 定义接 ...

随机推荐

  1. Android 设置启动界面

    启动界面的意义是为了让后台处理耗时的复杂工作,当工作处理完成后,即可进入主界面.相比让用户等待布局加载完成,使用一张图片作为启动背景,会带来更好的体验. 首先,需要建立一个简单的布局: <?xm ...

  2. python返回值与局部全局变量

    Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...

  3. matlab GUI封装exe文件

    学习matlab过程中,有时有些程序处理数据时老是看着代码,也会觉得疲倦,那么要试一试matlab的GUI吗?我就是这么使用matlab的GUI制作一个小程序,并且使用matlab封装成了exe文件. ...

  4. HTML5实现网页的全屏切换

    使用HTML5提供的JavaScript Api可以实现主流浏览器的全屏和退出全屏操作,封装成进入全屏和退出全屏的函数如下: //进入全屏 function enterFullScreen() { v ...

  5. testng 教程

    Testng 简介: Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation,主要有以下特性: annotations  注释,如 @test ...

  6. NEFU 558 迷宫寻路

    题目链接 简单搜索题 #include <cstdio> #include <iostream> #include <cstring> using namespac ...

  7. 转:asp.net TreeView CheckChanged 事件浅谈

    http://blog.csdn.net/xiage/article/details/5128755 在开发中经常可以碰到类似的问题: 想通过一个树父节点的TreeNodeCheckChanged 事 ...

  8. CSS初始化样式

    为什么要初始化CSS? CSS初始化是指重设浏览器的样式.不同的浏览器默认的样式可能不尽相同,所以开发时的第一件事可能就是如何把它们统一.如果没对CSS初始化往往会出现浏览器之间的页面差异.每次新开发 ...

  9. iOS10 SiriKit QQ适配详解

    原文连接 1. 概述 苹果在 iOS10 开放了 SiriKit 接口给第三方应用.目前,QQ已经率先适配了 Siri 的发消息和打电话功能.这意味着在 iOS10 中你可以直接告诉 Siri 让它帮 ...

  10. 第一章 Web应用程序简介

    1.1 Web应用程序基础知识 URL.URN与URI URL:Uniform Resource Locator URN:Uniform Resource Name URI:Uniform Resou ...