新手教程之使用Xib自定义UITableViewCell

前言

首先:什么是UITableView?看图

其次:什么是cell?

然后:为什么要自定cell,UITableView不是自带的有cell么?

因为在日常开发中,系统自带的cell满足不了客户和开发人员的需求(并且每个cell中的内容\大小\样式相同),我们就需要自定义cell来实现更加优化的功能.比如下面这种

最后:怎么自定义cell?

1.创建一个新的项目,在storyboard中拖入两个imageView,两个label

 

2.在ViewController里面创建UITableView

  1. //
  2. // ViewController.m
  3. // Xib自定义UITableViewCell
  4. //
  5. // Created by admin on 16/5/16.
  6. // Copyright © 2016年 KXZDJ. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10.  
  11. @interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
  12. @property (nonatomic, strong) UITableView *tableView;
  13. @end
  14.  
  15. @implementation ViewController
  16.  
  17. - (void)viewDidLoad {
  18. [super viewDidLoad];
  19. // Do any additional setup after loading the view, typically from a nib.
  20. [self config];
  21. }
  22.  
  23. - (void)didReceiveMemoryWarning {
  24. [super didReceiveMemoryWarning];
  25. // Dispose of any resources that can be recreated.
  26. }
  27.  
  28. -(void)config {
  29. //初始化tableView,并给tableView设置frame以及样式
  30. self.tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];
  31. //遵守代理和数据源(因为要用到代理和数据源方法)
  32. self.tableView.delegate = self;
  33. self.tableView.dataSource = self;
  34. //添加到ViewController的视图中
  35. [self.view addSubview:self.tableView];
  36. }
  37.  
  38. /**
  39. * 返回多少个组(默认是1组,如果只有一组可以不实现这个方法)
  40. *
  41. * @param tableView 当前tableView
  42. *
  43. * @return 组的个数
  44. */
  45. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  46. return ;
  47. }
  48. /**
  49. * 每一组返回多少行
  50. *
  51. * @param tableView 当前tableView
  52. * @param section 当前组
  53. *
  54. * @return 行的个数
  55. */
  56. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  57. return ;
  58. }
  59.  
  60. -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  61. //指定cell的重用标识符
  62. static NSString *reuseIdentifier = @"CELL";
  63. //去缓存池找名叫reuseIdentifier的cell
  64. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
  65. //如果缓存池中没有,那么创建一个新的cell
  66. if (!cell) {
  67. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
  68. }
  69. //返回当前cell
  70. return cell;
  71. }

系统自带的UITableView

运行效果

4.Xib自定义cell

首先我们要创建一个xib文件,有两种创建方式:

直接上图

第一种:

第二种:

第二种在创建类的时候也同时创建了xib,比较方便,要是用第一种方式创建,还得关联类

下面就要拖控件到Xib的cell中并给控件设置布局(约束)了

下面进入代码阶段

5.获取Xib自定义的cell

代码:(XibTableViewCell.h)

  1. //
  2. // XibTableViewCell.h
  3. // Xib自定义UITableViewCell
  4. //
  5. // Created by admin on 16/5/16.
  6. // Copyright © 2016年 KXZDJ. All rights reserved.
  7. //
  8.  
  9. #import <UIKit/UIKit.h>
  10.  
  11. @interface XibTableViewCell : UITableViewCell
  12. //加载xib的方法(自己写的,不是系统自带)
  13. +(instancetype)xibTableViewCell;
  14.  
  15. @end

(XibTableViewCell.m)

  1. //
  2. // XibTableViewCell.m
  3. // Xib自定义UITableViewCell
  4. //
  5. // Created by admin on 16/5/16.
  6. // Copyright © 2016年 KXZDJ. All rights reserved.
  7. //
  8.  
  9. #import "XibTableViewCell.h"
  10.  
  11. @implementation XibTableViewCell
  12. //实现类方法
  13. +(instancetype)xibTableViewCell {
  14. //在类方法中加载xib文件,注意:loadNibNamed:owner:options:这个方法返回的是NSArray,所以在后面加上firstObject或者lastObject或者[0]都可以;因为我们的Xib文件中,只有一个cell
  15. return [[[NSBundle mainBundle] loadNibNamed:@"XibTableViewCell" owner:nil options:nil] lastObject];
  16. }
  17.  
  18. - (void)awakeFromNib {
  19. // Initialization code
  20. }
  21.  
  22. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  23. [super setSelected:selected animated:animated];
  24.  
  25. // Configure the view for the selected state
  26. }
  27.  
  28. @end

6.把xib文件加载到系统的UITableView中替换系统自带的cell

这一步必须在

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中进行,或者是封装在自己定义的类中,不过就算封装了,也要在这个方法中调用.

6.1给控件拖线关联到类中,方便调用控件

6.2代码:

  1. //
  2. // ViewController.m
  3. // Xib自定义UITableViewCell
  4. //
  5. // Created by admin on 16/5/16.
  6. // Copyright © 2016年 KXZDJ. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10. //导入头文件
  11. #import "XibTableViewCell.h"
  12.  
  13. @interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
  14. @property (nonatomic, strong) UITableView *tableView;
  15. @end
  16.  
  17. @implementation ViewController
  18.  
  19. - (void)viewDidLoad {
  20. [super viewDidLoad];
  21. // Do any additional setup after loading the view, typically from a nib.
  22. [self config];
  23. }
  24.  
  25. - (void)didReceiveMemoryWarning {
  26. [super didReceiveMemoryWarning];
  27. // Dispose of any resources that can be recreated.
  28. }
  29.  
  30. -(void)config {
  31. //初始化tableView,并给tableView设置frame以及样式
  32. self.tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];
  33. //遵守代理和数据源(因为要用到代理和数据源方法)
  34. self.tableView.delegate = self;
  35. self.tableView.dataSource = self;
  36. //添加到ViewController的视图中
  37. [self.view addSubview:self.tableView];
  38. }
  39.  
  40. /**
  41. * 返回多少个组(默认是1组,如果只有一组可以不实现这个方法)
  42. *
  43. * @param tableView 当前tableView
  44. *
  45. * @return 组的个数
  46. */
  47. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  48. return ;
  49. }
  50. /**
  51. * 每一组返回多少行
  52. *
  53. * @param tableView 当前tableView
  54. * @param section 当前组
  55. *
  56. * @return 行的个数
  57. */
  58. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  59. return ;
  60. }
  61.  
  62. -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  63. //指定cell的重用标识符
  64. static NSString *reuseIdentifier = @"CELL";
  65. //去缓存池找名叫reuseIdentifier的cell
  66. //这里换成自己定义的cell
  67. XibTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
  68. //如果缓存池中没有,那么创建一个新的cell
  69. if (!cell) {
  70. //这里换成自己定义的cell,并调用类方法加载xib文件
  71. cell = [XibTableViewCell xibTableViewCell];
  72. }
  73. //给cell赋值
  74. cell.backView.image = [UIImage imageNamed:@"223733vuf3mhajhd04hdh5"];
  75. cell.infoLabel.text = @"金三胖真帅";
  76. cell.infoLabel.textColor = [UIColor redColor];
  77. cell.zanView.image = [UIImage imageNamed:@"103112778vn00czp59p6w7"];
  78. cell.zanLabel.text = @"";
  79. cell.zanLabel.textColor = [UIColor redColor];
  80. //返回当前cell
  81. return cell;
  82. }
  83. /**
  84. * 返回cell的行高
  85. *
  86. * @param tableView 当前tableView
  87. * @param indexPath
  88. *
  89. * @return cell的行高
  90. */
  91. -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  92. return ;
  93. }
  94.  
  95. @end

运行效果

总结:到此Xib自定义UITableViewCell就告一段落,如有错误,烦请各位指正,希望能帮到大家,不是故意黑金三胖.

新手教程之使用Xib自定义UITableViewCell的更多相关文章

  1. iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

    iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文 ...

  2. 【转】iOS 通过xib自定义UITableViewCell【原创】

    原文网址:http://blog.it985.com/9683.html 在使用tableView的时候,如果cell的布局过于复杂,通过代码搭建的话不够直观.并且要不停的调整位置,字体什么的.这时, ...

  3. 通过xib自定义UITableViewCell

    通过xib自定义UITableViewCell 一.新建iOS Application工程,选择Single View Application,不要选中Use Storyboard.假设指定的是pro ...

  4. 用xib自定义UITableViewCell的注意事项——重用

    问题的提出: 有时候我们经常需要自定义tableView的cell,当cell里面的布局较为复杂时往往舍弃纯代码的方式而改用xib的方式进行自定义.当我们用纯代码的方式布局cell时,往往会在cell ...

  5. 【swift学习笔记】三.使用xib自定义UITableViewCell

    使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖放一个图片和一个文本框到tableviewc ...

  6. 用xib自定义UITableViewCell

    1.文件结构: 2. 先创建一个xib文件,删除原有的view,添加一个TableViewCell控件. 3.ModelTableViewController.m文件 #import "Mo ...

  7. IOS学习之路七(通过xib自定义UITableViewCell)

    一.新建iOS Application工程,选择Single View Application,不要选中Use Storyboard.假设指定的是product name是:UITableViewCe ...

  8. 【转】自定义UITableViewCell(registerNib: 与 registerClass: 的区别)

    自定义UITableViewCell大致有两类方法: 使用nib 1.xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 2.调用 tableVi ...

  9. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

随机推荐

  1. Windows 消息机制详解

    总的来说: MSG包括: 窗口句柄,指示MSG发送的目的窗口 消息标识 lPARAM.wParam 发送时间 发送时的鼠标位置   关于消息队列: Windows系统有一个系统消息队列 每个线程都有一 ...

  2. EasyUI Accordion下的Panel面板初始化时全部折叠

    EasyUI Accordion下的Panel面板有一个属性:selected,默认值为:false.初始化时,若设置'selected:true',则面板默认打开,效果如下: <div tit ...

  3. jQuery 的选择器

    本文来自网上转帖 1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 element 根据元素的名称选择, ...

  4. CloudStack服务引擎配置(cloud-engine-service模块)

    "?> <!--CloudStack服务引擎配置--> <beans xmlns="http://www.springframework.org/schem ...

  5. access数据库密码破解

    根据C语言教学书上的示例编写,主要破解access的密码,通过异或算法,支持access2000和access2003,其他版本的没经过测试,下面是具体代码: #include <stdio.h ...

  6. Linux 网络编程 高级套接字

    一.套接字选项: 有以下3中方式可以对套接字选项进行设置: getsockopt 和 setsockopt 函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数用于获得 ...

  7. 深入Delphi -- Windows 消息机制

    http://www.txsz.net/xs/delphi/3/Windows%20%E6%B6%88%E6%81%AF%E6%9C%BA%E5%88%B6.htm Windows 消息机制 by m ...

  8. VPW Communication Protocol

    http://www.fastfieros.com/tech/vpw_communication_protocol.htm Breakdown of the j1850 3 byte Header f ...

  9. PostgreSQL中的数组与Any

    建立表: CREATE TABLE sal_emp ( name text, pay_by_quarter integer[], schedule text[][] ); 插入数据: INSERT I ...

  10. 工作一直没有进步怎么办?试试PDCA法则吧!

    许多人在工作或者学习的时候,总是会发现自己过了一段时间以后,全然没有不论什么进步.或者进步很之少. 而对于每个渴望让自己变得更好的人来说.是一件很令人苦恼的事情,今天我们就来谈一下工作和学习上,可实现 ...