iOS开发

java 开发 ios 平台开发教程

我插入移动硬盘后,电脑右上角老是出现一个齿轮转啊转,然后弹出对话框说有新文件加入电脑什么文件夹,要不要去看,关还关不掉,于是乎,昨晚脑袋一抽就把那个弹出来的文件夹移入废纸篓,然后发现不能这么干,就从废纸篓恢复,然而Finder就卡死了= =不管怎样都没响应,我烦的不行就强制按电源键重启电脑了(用Win系统的坏习惯,有事没事重启一下),然后!!!输入密码登陆,如下图:

然后就重启了= =,无限循环进不了系统,各种方法无果后,没办法去了售后店。解决方法,重装系统,花费300大洋,我去!真特么贵,唉~谁叫自己作呢,弄好后回家第一件事就是自制U盘启动盘。

其实很简单,先下好镜像文件,然后插入U盘,格式化它,再可以给它分区,这个随意我就没分,最后终端输入命令,等着就行了。

安装包名称:Install OS X El Capitan.app

sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia –volume /Volumes/u盘 –applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app –nointeraction

第二件事就是开启TimeMachine备份。

之前写的代码都没了= =,唉,不说这事了,都是泪%>_<%

调试新系统,调整心情,再一次安装Xcode,继续学习啦~

今天开始学习UITableView

UITableView

在众多app中,能看到各式各样的表格数据,如下

在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView

UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳

UITableView的两种样式

UITableView需要一个数据源(dataSource)来显示数据UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等没有设置数据源的UITableView只是个空壳凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源UITableViewDataSource协议

UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行

UITableViewCell内部有个默认的子视图:contentView,contentView是UITableViewCell所显示内容的父视图,可显示一些辅助指示视图。还可以通过cell的accessoryView属性来自定义辅助指示视图(比如往右边放一个开关)

UITableViewCell的contentView

contentView下默认有3个子视图

其中2个是UILabel(通过UITableViewCell的textLabel和detailTextLabel属性访问)

第3个是UIImageView(通过UITableViewCell的imageView属性访问)

UITableViewCell还有一个UITableViewCellStyle属性,用于决定使用contentView的哪些子视图,以及这些子视图在contentView中的位置

iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象Cell的重用代码

– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

// 1.定义一个cell的标识

static NSString *yu3 = @“yu3”;

// 2.从缓存池中取出cell

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:yu3];

// 3.如果缓存池中没有cell

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:yu3];

return cell;

上面的写法并不好,因为数据源不需要知道cell内部的标识为什么,cell的标识cell自己最清楚,应该把创建cell的代码封装在cell里面,如下(YUCell为我自定义的cell类名)

+ (instancetype)cellWithTableView:(UITableView *)tableView{

static NSString *yu3 = @“yu3Cell”;

YUCell *cell = [tableView dequeueReusableCellWithIdentifier:yu3];

if (cell == nil) {

cell = [[YUCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:yu3];

return cell;

这样,数据源里的方法就很简单

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

YUCell *cell = [YUCell cellWithTableView:tableView];

return cell;

这样的话,如果以后cell里面的东西要变化,只需要动cell里的代码,数据源里代码不需要改变。

今天做了一个UIScrollView和UITableView综合的小项目

仿造团购app的界面,上面的广告可以自动翻页,滑到下面有按钮点击后加载数据

上面的广告,每个cell还有下面的加载更多按钮都是用xib封装的

使用xib封装一个view的步骤:

1.新建一个xib文件描述一个view的内部结构

2.新建一个自定义的类(自定义类需要继承自系统自带的view, 继承自哪个类,  取决于xib根对象的Class)

3.新建类的类名最好跟xib的文件名保持一致

4.将xib中的控件 和 自定义类的.m文件 进行连线

5.提供一个类方法返回一个创建好的自定义view(屏蔽从xib加载的过程)

6.提供一个模型属性让外界传递模型数据

7.重写模型属性的setter方法,在这里将模型数据展示到对应的子控件上面

像上面的加载更多按钮,他是在

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注