iOS开发 - 第02篇 - UI进阶 - 15 - 彩票(第二天)

实现:彩票设置界面


源代码下载地址:点击打开链接


1、我的彩票(设置界面) --- 重要


1.1 界面




1.2 搭建设置界面分析


1> 静态单元格:一个Cell一个Cell的改,太麻烦,而且不灵活

2> plist文件:配置plist文件太费时间

3> 分析数据结构:大数组里面存放两个小数组,小数组存放每一行的模型

1. 大数组:告诉tableView有多少组tableView:numberOfSectionsInTableView:

2. 小数组:告诉tableView每一组多少行tableView:numberOfRowsInSection:

3. 小数组里存:每一行长什么样tableView:cellForRowAtIndexPath:


1.3 自定义设置控制器(代码跳转)


1:单独弄一个设置模块,处理业务逻辑,而且以后可以直接拿来使用

注2:自定义ILSettingViewController,由于是分组模式,重写init方法,return [superinitWithStyle:UITableViewStyleGrouped];

注3:点击设置后代码跳转

[self.navigationControllerpushViewController:settingVc animated:YES];


1.4 自定义Cell模型(ILSettingItem(title, icon))




1.5 自定义组模型ILSettingGroup(header, footer,items)


每一组有头部标题和尾部标题和有多少行Cell

1> 在ILSettingViewController中,添加模型数组,懒加载方法中先随便设置两组数据




2> 根据上面的模型,重写tableView的数据源方法和Cell样式方法,进行测试


1.6 自定义Cell(ILSetttingCell)


设计步骤:先设计模型,在封装视图,因为视图是根据模型展示的

1> 添加模型ILSettingItem的setter方法

2> 类方法:+(instancetype)cellWithTableView:(UITableView *)tableView;

3> accessoryView处理(Cell右边显示箭头(跳转),还是开关)

由模型决定,tableView上的所有显示

方法一:给ILSettingItem模型添加一个枚举,不够面向对象

方法二:应该把每一个Cell的类型都对应一个模型,因为不同的Cell类型不同的操作。箭头的Cell一般需要跳转,开关的不需要跳转,箭头应该比开关多添加一个属性,跳转的控制器类型Class

4> 自定义箭头模型(ILSettingArrowItem),继承ILSettingItem,添加一个跳转的控制器的属性,并提供一个类方法

注1. Class用assign,因为只是表征需要跳转的控制器类型,不需要管理内存在的问题

注2. 为什么用Class,因为Class写错类型就会报错,如果用NSString来表征跳转的控制器类名,会存在手误的情况,不能及时检查错误

5> 自定义开关模型(ILSettingSwitchItem),继承ILSettingItem

6> 重写setter模型的方法里,根据Item的类型判断Cell上显示什么样的accessoryView

7> Cell懒加载UIImageView和UISwitch,注意用strong,否则会被销毁,没有其他视图强引用他,没有addSubviews

注:只要没有add的控件,都需要强引用






注:ILSettingArrowItem添加类方法快速创建模型




1.7 Cell的跳转


实现tableView代理方法didSelectRowAtIndexPath

1> 根据模型判断是否需要跳转

2> 是否有destVcClass属性

3> 通过类名创建控制器对象,跳转。[[arrowItem.destVcClassalloc] init];




2、检查更新


1> 点击更新Cell,做一些事情,而不是跳转,最蠢的办法根据角标去判断,点击了哪一行

2> 更新操作交给模型去管理,让模型保存一个功能,怎么保存代码?给ILSettingItem添加一个block属性,用block保存一段代码,每一行Cell应该都会有操作,因此给ILSettingItem(父类)添加block属性,这样子类都有这个block属性

typedef void(^ILSettingItemOption)();

// 保存一段功能,在恰当的时候调用

@property (nonatomic, copy) ILSettingItemOption option;

3> 完善更新模型

1. 思路:只有服务器才知道是否有最新数据,因此需要发送网络请求

2. 更新功能步骤:发送网络请求(当前手机版本) -> 服务器返回数据(是否需要更新) -> 弹框提示用户

3. 如果需要更新跳到AppStore更新

4> 点击Cell的时候调用block

5> 更新Cell一直选中状态,应该点击一行的时候,立即取消






注:以上已封装好模型,是否需要跳转,需要执行什么功能,已经全部交给模型去管理,设置界面以后可以拿来直接用,修改模型即可!!!


3、产品推荐


3.1 UICollectionViewController --- 重要


1> 使用UICollectionViewController,查看头文件和UITableViewController一样,有数据源和代理

2> UITableView每一行是UITableViewCell,UICollectionView每一个是UICollectionViewCell

3> 实现数据源,

1. numberOfSectionsInCollectionView:返回UICollectionView有多少组

2. numberOfItemsInSection:返回一组多少个

3. cellForItemAtIndexPath:返回一个Cell长什么样

4. section:哪一组 item:哪一个

1:使用UICollectionViewCell必须先注册,因为init方法没有提供标识符的构造方法

2:注册Cell,在viewDidLoad注册一次

3:必须传入布局,告诉他怎么布

4:使用流水布局 UICollectionViewFlowLayout,封装到控制器里面

5:设置UICollectionViewCell的尺寸和位置,通过layout布局设置




3.2 解析json数据


完成产品推荐(分析产品json数据),以后的思路都是这样的:解析数据,转换模型,描述界面,传递模型给界面,展示到视图

1> 解析json数据,json最外面是[],表示这是个json数组,解析出来也是数组

2> 创建模型,提供类方法,不能用KVCid比较特殊

3> 自定义Cell,传递模型

4> 注册XIB的Cell

5> 设置Cell里UIImageView的圆角属性,设置Cell的尺寸。

6> 监听点击

7> 导航条的标题:在push之前的时候就设置,拿到模型的title直接设置vc.title = arrowItem.title;








4、推送和提醒




4.1 抽取父类


分析推送和提醒界面外观:跟设置界面一样的Cell,只需要给Cell传递一个模型,就自动生成一个界面了

1:推送和提醒的界面(以及帮助、分享等界面)与设置界面基本一致,都是一个tableView,都可以将ILSettingViewController中的代码复制过来,修改显示模型即可,因此需要抽取出父类(ILBaseTableViewController),将其他控制器继承自ILBaseTableViewController即可!!!

2:在ILBaseTableViewController中实现数据源、Cell明细、点击某一行方法


4.2 配置模型


接下来只需要给控制器配置不同的模型,显示即可,配置中奖提醒,中奖动画,比分直播(ILAwardPushViewController, ILAwardAnimationViewController,ILScoreNoticeViewController)




4.3 比分直播提醒




控制器比较特殊,Cell右边有UILabel

1> 相当于又多了一个模型,自定义ILSettingLabelItem,添加text属性,用于显示UILabel文字

2> 修改ILSettingCell,根据模型,判断是否懒加载UILabel,UILabel必须设置尺寸

_labelView.bounds = CGRectMake(0, 0, 100, 44);

_labelView.textColor = [UIColor redColor];

_labelView.textAlignment = NSTextAlignmentRight;

3> 同上配置比分直播的模型即可

4> 比分直播label处理

1. 从下往上钻的是什么,键盘才有这样的效果,也就是点击label弹出键盘

2. 什么东西能弹出键盘,textField成为第一响应者

3. 创建一个textField,不需要显示,目的就是弹出键盘

4. 修改键盘inputView为UIDatePicker

5. 监听UIDatePicker的滚动,改变ILSettingLabelItem的值

6. 刷新表格,更新界面






5、数据存储


5.1 自定义存储工具类




5.2 将数据存储封装到模型的setter方法中


1> 存储Cell的accessoryView状态,用[NSUserDefaults standardUserDefaults]快速存储,别忘记同步synchronize

2> ILSettingLabelItem的text

1. 重写模型setText方法,在设置的text的时候就存储。

2. key:用模型的title属性,目的知道是哪个cell存储了,每个cell都有title

3> ILSettingSwitchItem开关的状态

1. 监听switch的改变

2. 给模型添加一个属性,开关属性off

3. 重写setOff方法,设置的时候就存储

4> 怎么读取,重写两个模型的setTitle方法,在设置title的时候就读取一次,给对应的属性赋值。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值