WXHL 学习文章连载十二

1.界面架构
*TabbarControllor + NavigationController【storybaord】
*设置Tabbar的文字和图片
》系统的tabbar不好用,自定一个TabbarControllor替换TabbarControllor的tabbar
》监听自定义tabbar的按钮的事件,来切换TabbarControllor的子控件器
》完成自定义tabbar的按钮的选中效果
*设置按钮选中的图片
*设置按钮选中selected的属性
*设置导航条的模式
2.模块分析
*根据功能来分析
0>主模块
1>购彩大厅
2>合买跟单身
3>开奖信息
4>幸运广场
5>我的彩票
*登录模块
*设置模块


一、彩票基本框架搭建
1.storyboard创建彩票框架【UITabbarController + UINavigationController】
2.自定义Tabbar
①自定义Tabbar控制器,在Tabbar控制器的viewDidLoad方法写下面的步骤
②自定义Tabbar,创建一个UIView,取名叫mTabbar,然后添加五个按钮上去。
//UIView mTabbar = [[UIView alloc] init];
// 然后往mTabbar add 5个按钮
③然后将tabbar添加到系统的tabbar上
//获取系统的tabbar [self.tabbar addSubView:mTabbar]
④监听自定义tabbar上按钮的点击事件来切换tabbar控制器的子控制器
⑤设置自定义tabbar里button的选中效果


二、抽取自定义tabbar
1.写一个类继承UIView,类名为CZTabbar
2.在CZTabbar的initWithFrame方法中初始化五个按钮
3.在CZTabbar中对五个按钮进行布局
4.监听按钮事件,设置选中按钮
5.代理通知控制器按钮的选中


三、优化自定义tabbar
1.去除自定义的initWithFrame的方法
2.在CZTabbar 增加一个 添加按钮的方法
//addBtnWithNormalImge:selImg 因为添加按钮应该让外界来添加,不应该自己来添加
3.在自定义的tabbar控制器,循环往tabbar添加按钮图片
4.从新回到CZTabbar的layoutSubivews方法,重新修改布局代码
5.运行按钮的选中状态,自定按钮,实现setHighlighted方法,空实现
/*
@implementation CZTabbarButton : UIButton


-(void)setHighlighted:(BOOL)highlighted{
//空实现
}
*/


6.要改按钮的监听事件为TouchDwon


四、设置导航栏样式
1.设置导航栏背影图片
"导航栏背影图片设置有两种方式"
①局部配置: 获取导航控制器的navigationBar属性,来设置导航条的背景图片,'这种只能对单个导航控制器有效'

/*[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];*/


②全局设置: 通过[UINavigationBar appearance] 获取的导航条对象可以设置应用的 "所有导航条" 的样式,
如:
/*
UINavigationBar *navBar = [UINavigationBar appearance];
[navBar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];
*/


2.设置状态栏的样式
"设置状态栏的样式有两种方式"
方式1: 由控制器决定状态样的样式,在控制器实现【-(UIStatusBarStyle)preferredStatusBarStyle】方法
/*
注:如果有导航控制器,应在导航控制器实现【-(UIStatusBarStyle)preferredStatusBarStyle】
这种方式要指定storyboard中的每个导航控制器的类 指向 自定义的导航控制器类
*/


方式2: 由UIApplicatoin设置状态栏样式
①在info.plist文件中添加View controller-based status bar appearance = NO
//为什么要配置plist文件,因为xcode5以后创建的项目,状态栏的样默认是由控制器决定
②[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;


"+initialize方法"
①背景和样式只要调用一次就好了,把主题的设置转到 "自定义导航控制器" 的initialize方法中
②initialize 方法在类第一次使用的时候被调用


3.设置导航条的标题大小与颜色
①获取全局配置的 UINavigationBar 对象,调用【setTitleTextAttributes】方法来设置;
/*
NSDictionary *titleAttr = @{
NSForegroundColorAttributeName:[UIColor whiteColor],//字体颜色
NSFontAttributeName:[UIFont systemFontOfSize:20]//字体大字
};
[navBar setTitleTextAttributes:titleAttr];
*/


五、添加导航条按钮
1.添加 "购买大厅" 的导航条右上解 '资讯' 按钮
有文字有图片,使用UIButton实现,UIBarButtonItem要么只能放文字要么只能放图片
按钮中的 '文字与图片的间距' 可以在storybaord中通过属性里的【edge:title】来设置


2.添加 "合买跟单" 中 '标题按钮' 的实现
如图


①默认按钮的图片在左边,文字在右边


②现在按钮的文字要在右边,这里可以通过自己义按钮来改变图片和文字的显示位置
只要实现下面两个方法即可
//【titleRectForContentRect】标题的位置与尺寸
//【imageRectForContentRect】图片的位置与尺寸
// 实现setHighlighted,不高亮图片
③点击 '标题按钮' 按钮图片要旋转,调用Button的imageView的transform属性进行旋转即可


3.添加 "我的彩票" 导航条右边的 '设置' 按钮
》设置的文字大小与颜色
*使用[UIBarButtonItem appearance]设置"全局的导航条"右边按钮的文字大小与颜色
/*代码摘要
*[barBtnItem setTitleTextAttributes:itemsAttr forState:UIControlStateNormal];
*/


六、设置导航控制器在显示新控制器时 "隐藏" Tabbar
解决方案
1.storyboard设置,此时方式比较麻烦
2.代码设置
*在自定义的导航控制器中,拦截【pushViewController:animated:】此方法,当有新的控制器推出时调用
*在拦的方法中设置viewController.hidesBottomBarWhenPushed = YES;
*还有个【popViewController:animated:】,此方法,当有控制器移除是调用


七、设置导航控制器返回按钮的样式
》导航控制器的返回按钮的箭头是白色的,但默认是蓝色
》调用[UINavigationBar appearance]的tintColor属性为白色即可


八、实现 "设置页面"
》经分析,不使用静态表格,使用代码方式实现
1.创建一个继承表格控制器的 '设置控制器' 【@interface CZSettingViewController : UITableViewController】
2.创建模型【CZSettingItem】
3.显示数据
4.在 '设置控制器' 中实现下面方法,目的返回组样式的表格
/*
//创建表格控制器时会调用此方法
-(instancetype)initWithStyle:(UITableViewStyle)style{
//不管传什么,都返回组样式的表格
if (self = [super initWithStyle:UITableViewStyleGrouped]) {
}
return self;
}
*/
5.添加CZSettingItem的类型,实现不同类型的cell,如箭头cell,开关Cell
①CZSettingArrowItem
②CZSettingSwichItem


6.重新实现表格显示的方法,根据CZSettingItem的类型来添加箭头还是开头


7.抽取自定义的Cell,实现数据模型设置时,显示表格数据
*为什么要抽取,因为【tableView:cellForRowAtIndexPath:】方法已经写太多代码


九、实现表格点击进行不同的控制器
》在CZSettingItem添加个assign的Class属性,用来存放控制器的类型
//为什么用assign,因为Class是结构体
》在didSelected方法中,通过Class创建控制器,并使用导航控制器推出


十、实现设置表格不同cell点击的不同操作
》直接在didSelected方法里判断索引来实现不同操作不实际
》解决方案 给CZSettingItem添加一个block,预存要操作的 '代码块'
"实现不同cell点击的不同操作"
1.在CZSettingItem头文件中定义一个typedef void (^OperationBlock)();
2.在CZSettingItem添加一个OperationBlock属性
3.在表格的didSelected中判断,如果block有值,执行block的代码,如更新
4.实现更新,"讲解版本更新原理,并模拟实现"


十一、添加 "组模型CZSettingGroup",然后 "组模型"添加到 "数组"
》目标,方便以后抽取
》组模型里添加头部标题和尾部标题属性,用于设置每组表格的加头部标题和尾部标题


十二、抽取父类,其它类似于 "设置控制器" 可以继承父类来使用
1.抽取一个CZBaseSettingViewController
2.把CZSettingViewController的代码copy到CZBaseSettingViewController中
3.copy后删除CZBaseSettingViewController的viewDidLoad方法 "和" 更改相应的类名
4.把表格的数据属性'【cellDatas】' 暴露在头部文件中,实现懒加载,这样子控件器只要在自己的viewDidLoad添加数据即可


》实现:推送和提醒
》实现:推送和提醒-开奖号码推送 AwardNumPush
》实现:推送和提醒-中奖动画 AwardAnimation
》实现:推送和提醒-比分直播提醒 ScoreLive
》实现:推送和提醒-购彩定时提醒 BuyTimerWarn


-------------------------设置模块 部分代码-----------------


LCSettingItem *item1 = [LCSettingArrow itemWithIcon:@"MorePush" title:@"推送和提醒" vcClass:[LCPushAndWarningVC class]];
LCSettingItem *item2 = [LCSettingSwitch itemWithIcon:@"more_homeshake" title:@"摇一摇机选"];
LCSettingItem *item3 = [LCSettingSwitch itemWithIcon:@"sound_Effect" title:@"声音和效果"];
LCSettingGroup *group1 = [[LCSettingGroup alloc]init];
group1.items = @[item1,item2,item3];
[self.cellData addObject:group1];
LCSettingItem *item4 = [LCSettingArrow itemWithIcon:@"MoreUpdate" title:@"检查版本更新"];
item4.operation = ^(){
/*
//判断是否有最新版本
// 1)获取服务器的版本号
//NSString *serverVerson =
// 2)获取本地的版本号
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *localVersion = info[@"CFBundleShortVersionString"];
// 3)判断是否有最新的版本
if(serverVersion > localVersion){
//跳到APPStore (URL:地址)
}else{
//已经是最新版本
}
*/
//模拟检查新版本
[MBProgressHUD showMessage:@"正在检查新版本"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUD];
[MBProgressHUD showSuccess:@"当前已经是最新版本"];
});
};
LCSettingItem *item5 = [LCSettingArrow itemWithIcon:@"MoreHelp" title:@"帮助" vcClass:[LCHelpVC class]];
LCSettingItem *item6 = [LCSettingArrow itemWithIcon:@"MoreShare" title:@"分享" vcClass:[LCShareVC class]];
LCSettingItem *item7 = [LCSettingArrow itemWithIcon:@"MoreMessage" title:@"查看消息"];
LCSettingItem *item8 = [LCSettingArrow itemWithIcon:@"MoreNetease" title:@"产品推荐"vcClass:[LCProductsShareVC class]];
LCSettingItem *item9 = [LCSettingArrow itemWithIcon:@"MoreAbout" title:@"关于"];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值