IOS之UI -- UITableView -- 2 -- 等高的Cell
内容大纲:
1、纯代码 添加子控件
2、Autolayout纯代码 -- Masonry框架的使用
3、自定义等高的cell -- storyboard的使用(更加简单)
4、静态cell
等高的Cell
自定义等高的cell
- 纯代码
- frame
- Autolayout
1、纯代码 添加子控件
项目初始准备:
1、将Storyboard的开始默认的UIView删除,
2、然后添加UITableViewController的控件,
3、将UITableViewController控件设置为is init View Controller,同时设置class为ViewController,
4、接着回到ViewController.h文件,将其继承UITableViewController。
5、最后回到ViewController.m文件,进行纯代码操作。
纯代码操作开始:
1、实现数据源方法。<略,必须会啊,这里就不提了>
2、先写好访问缓存池加载cell的代码

本来:然后自定义cell,自定义控件里面两个方法:添加子控件方法initFrame,设置子控件方法layoutSubviews 但是: 这里两个方法是不会被调用的,因为前面的访问缓存池方法是调用(自己补充截图)
3、新建继承UITableViewCell自定义cell,添加子控件方法initWithStyle同时调用父类的这个方法,设置子控件方法layoutSubviews

4、接着要注意的就是
<1>如果需要引用指向子控件,然后使用,取名不要和UITableViewCell自带的子控件冲突,比如self.label detailLabel
<2>然后就是一定要先将创建的子控件对象添加进父控件,然后再用前面声明的弱引用指向它。
<3>添加子控件,一定要用self.contentView add... 不要用 self add.. 因为在这里子控件的父类建议是contentView

如果要用注册的方法循环利用cell,也是可以的,而且通过以下注册的方法,其实内部也是调用自定义cell的initWithStyle的初始化方法,是不会调用init或者initWithFrame方法的。

接下来就是为子控件设置位置
首先要记得:

然后开始设置子控件的frame

到这里就直接给源码了
链接: http://pan.baidu.com/s/1eQrxLaM 密码: jw7c
效果图:

Autolayout纯代码 -- Masonry框架的使用
我们会发现前面纯代码设置布局,如果项目复杂的时候,代码会写的很恶心,所以需要好用的框架。 如果要继续使用前一章节的代码,请讲源代码中的-(void)layoutSubviews方法全部删去即可,因为不需要这个设置子控件布局了。
首先是Masonry框架的百度云下载
链接: http://pan.baidu.com/s/1jGrVFaY 密码: e2rq
框架使用注意:
#define MAS_SHORTHAND
#define MAS_SHORTHAND_GLOBALS
#import "Masonry.h"
注意:
1、除了导入头文件,还需要定义宏,而且这两个宏必须写在import之前,定义宏的作用是:会自定提供某些代码给你用。总之以上三行代码原封不动的写在文件首部。
2、子控件必须加进父控件再设置约束,因为相关约束是和父控件相关的。而且是要写在创建和添加父控件之后。下面看图代码就知道了。

总结:主要还是通过敲敲代码熟悉框架的使用。不敲不算真正会使用框架。
相关Frame的补充:
例如:CGMakeGetMaxX(控件的对象.frame),CGMakeGetCenterX(控件的对象.frame)等相关的使用,可以查看源代码查看其它的。
自定义等高的cell -- xib的使用
这 时候,新建一个xib文件和新建一个xib使用的继承UITableViewCell的类HYTableViewCell。 然后在继承自UITableViewController的ViewController中写好数据源方法。<这些准备工作就略过了。> 记得要将xib文件对应的class设置为自定义cell上:
- 主要工作开始喽:
1、在数据源方法中,其中写绑定数据源循环利用标识加载cell与之前纯代码就不一样了
之前:

现在:

2、在xib文件设定好尺寸之后,然后添加UIImageView和UILabel控件,以及通过拖线设置好布局。
3、然后一定要记得将子控件拖线到自定义需要的UI类并连接。
注意必须知道的要点:
通过xib加载自定义cell,不管是通过注册,还是通过在设cell的循环利用的方法,他们都不会去调用alloc-init/initWithStyle。子控件也同样。
另外:可以在新建的时候:

因为新建的相关的xib文件,就是TableViewCell控件(其实之前可以直接拖拽TableViewCell控件,而我之前都是直接拖拽UIView控件,所以没有ID属性),所以有ID属性设置,可以将自定义cell要绑定ID设置:

但 不管cell的父控件是UIView还是TableViewCell在控制器代码中,绑定ID代码差不多麻烦(麻烦的原因:因为在 ViewController加载外部的xib还是与xib相关的自定义控件代码文件,都需要首次加载,毕竟一开始就不是属于 Viewcontroller自己管的,所以后面的用storyboard的方法是最简单的),但是加载外部的xib还是与xib相关的自定义控件代码文 件两者也有区别:

最后,xib对应的类文件,不管是父控件还是子控件都可以重写的方法 :
-(void)awakeFromNib{
//用于初始化控件的属性
}
-(void)layoutSubviews{
//用于设置子控件的布局
}
自定义等高的cell -- storyboard的使用(更加简单)
为storyboard的操作和前面的xib操作一样,添加子控件、设置子控件的布局、拖线索引等等都一样。这里就不累述了。

错误注意事项:

自定义cell的分割线
直接上图:

以上相关源代码链接: http://pan.baidu.com/s/1i3jkmFV 密码: xatp
静态cell
前面讲的都是动态cell,因为动态的cell是通过代码加载数据,是可以动态更新的。

TableView的静态Cell要会使用。这个有时间弄成gif图片。

另外要进一步,未完待续。
IOS之UI -- UITableView -- 2 -- 等高的Cell的更多相关文章
- IOS之UI -- UITableView -- 1 -- 相关初识
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- [iOS]UIScrollView嵌套UITableView,超出屏幕的cell点击不了问题
最初我是用UIScrollView嵌套了一个UIView,然后UIView里面嵌套UITableView,这样cell 就会超出屏幕那一部分点击不了. 解决方法如下,UITableView拖出来,作为 ...
- iOS开发UI篇—UITableview控件基本使用
iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...
- iOS开发UI篇—UITableview控件简单介绍
iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...
- iOS开发UI篇—实现UItableview控件数据刷新
iOS开发UI篇—实现UItableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...
- iOS开发UI篇—UITableview控件使用小结
iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...
- iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)
iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...
- iOS开发UI篇—直接使用UITableView Controller
iOS开发UI篇—直接使用UITableView Controller 一.一般过程 // // YYViewController.h // UITableView Controller // // ...
随机推荐
- ruby -- 进阶学习(十三)解说ckeditor在production环境下如何完整显示
将ROR项目从development环境改为production环境时,运行rake assets:precompile后, ckeditor的界面就无法完整显示?! @_@?? 出现 ActionC ...
- Web Fram 2 for IIS7.X(Microsoft Web Farm Framework)
Microsoft Web Farm Framework (WFF) 2.0 是微软开发的.基于IIS 7.x的小插件,能够帮助我们轻松实现Web网站的高性能.高可用性,用来在Web服务器群上提供和管 ...
- [OpenCV] Feature Matching
得到了杂乱无章的特征点后,要筛选出好的特征点,也就是good matches. BruteForceMatcher FlannBasedMatcher 两者的区别:http://yangshen998 ...
- Android学习笔记(第一篇)编写第一个程序Hello World+Activity
PS:终于开始正式的搞Android了...无人带的一介菜鸟,我还是自己默默的努力吧... 学习内容: 1.编写第一个Hello World程序.. 学习Android,那么就需要有一个编译器来集 ...
- webapp开发之需要知道的css细节
引言 首先说明一下,本文分享对象是涉世未深的移动开发者,至于有经验的开发者可以自行绕道. 说来惭愧,做了几年pc端的前端开发,很少接触到webapp的移动端开发.如今有机会参与webapp的开发,发现 ...
- css中zoom和transform:scale的区别
css中zoom和transform:scale的区别 关于zoom: 以前只是看到别人的代码中用过zoom,自己从未使用过,今天在探究ie7兼容inline-block时,发现里面提到了zoom.下 ...
- 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子
客户端:先创建一个winform窗体的应用程序项目 项目结构
- Python 3.X 实现定时器 Timer,制作抽象的Timer定时器基类
Python 在不依赖第三方库的前提下,对于定时器的实现并不是很完美,但是这不意味着我们无法实现. 阅读了网上的一些资料,得出一些结论,顺手写了一个基类的定时器(Python3) BaseTimer: ...
- Dev-Cpp配置OpenGL图形库(成功版本:Dev-Cpp 5.7.1 MinGW 4.8.1)
★配置前须知:Dev-Cpp自带OpenGL的使用和OpenGL简介 (附Dev-Cpp下载地址:http://sourceforge.net/projects/orwelldevcpp/?sourc ...
- Verilog学习笔记设计和验证篇(二)...............同步有限状态机
上图表示的就是数字电路设计中常用的时钟同步状态机的结构.其中共有四个部分产生下一状态的组合逻辑F.状态寄存器组.输出组合逻辑G.流水线输出寄存器组.如果状态寄存器组由n个寄存器组成,就可以记忆2^n个 ...