博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 网易彩票-2框架搭建-代码重构
阅读量:5281 次
发布时间:2019-06-14

本文共 4982 字,大约阅读时间需要 16 分钟。

在上一篇中,我们基本已经把整个框架都搭建出来了,下面进行代码重构一下。

思路:

  1. 导航按钮,按下时,会变灰,那是系统自带了,通过自定义UIButton,实现按下按钮立即切换效果。
  2. MJTabBarController管得太多了,只需要传图片过去,即创建好一个TabBar.
  3. 通过代理实现底部tabbar的切换。

一.自定义UIButton,继承自UIButton。MJTabBarButton.m

#import "MJTabBarButton.h"@implementation MJTabBarButton- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        // Initialization code    }    return self;}/** *  只要覆盖了这个方法,按钮就不存在高亮状态 */- (void)setHighlighted:(BOOL)highlighted{    //}@end

二.定义一个View,封装创建tarbar按钮的方法。

MJTabBar.h

#import 
@interface MJTabBar : UIView-(void)addTabBarWithName:(NSString *)name selName:(NSString *)selName;@end

MJTabBar.m

////  MJTabBar.m//  Lottery////  Created by jiangys on 15/8/30.//  Copyright (c) 2015年 weconex. All rights reserved.//#import "MJTabBar.h"#import "MJTabBarButton.h"@implementation MJTabBar//创建tabBar按钮-(void)addTabBarWithName:(NSString *)name selName:(NSString *)selName{    MJTabBarButton *button=[MJTabBarButton buttonWithType:UIButtonTypeCustom];        //设置图片    [button setBackgroundImage:[UIImage imageNamed:name] forState:UIControlStateNormal];    [button setBackgroundImage:[UIImage imageNamed:selName] forState:UIControlStateSelected];        //添加    [self addSubview:button];}//该方法通常是设置控件的尺寸,initWithFrame负责创建控件,initWithFrame下的frame是没有值的。-(void)layoutSubviews{    [super layoutSubviews];    NSUInteger count=self.subviews.count;    for (NSUInteger i=0; i

那么,MJTabBarController.m里加载底部的tabBar就很简单了

////  MJTabBarController.m//  Lottery////  Created by apple on 15/8/27.//  Copyright (c) 2015年 weconex. All rights reserved.//#import "MJTabBarController.h"#import "MJTabBar.h"@interface MJTabBarController ()@end@implementation MJTabBarController- (void)viewDidLoad {    [super viewDidLoad];        // 1.添加自己的tabbar    MJTabBar *myTabBar = [[MJTabBar alloc] init];    myTabBar.frame = self.tabBar.bounds;    [self.tabBar addSubview:myTabBar];        // 2.添加5个按钮    for (int i = 0; i

运行后的效果:

目前还不能点击底部的那几个tarBar按钮,拉下来,我们通过代理的方式来实现。

三.通过代理方式实现底部按钮点击切换

1.定义协议。在MJTabBar.h文件最上边声明协议

@class MJTabBar;@protocol MJTabBarDelegate 
-(void)tabBar:(MJTabBar *)tabBar didSelectButtonFrom:(int)from to:(int)to;@end

2.定义代理。继续在MJTabBar.h中声明一个委托的变量

//声明委托变量@property(nonatomic,weak)id
delegate;

MJTabBar.h完整代码

#import 
@class MJTabBar;@protocol MJTabBarDelegate
-(void)tabBar:(MJTabBar *)tabBar didSelectButtonFrom:(int)from to:(int)to;@end@interface MJTabBar : UIView//声明委托变量@property(nonatomic,weak)id
delegate;-(void)addTabBarWithName:(NSString *)name selName:(NSString *)selName;@end

3.通知代理。在MJTabBar.m完整代码

////  MJTabBar.m//  Lottery////  Created by jiangys on 15/8/30.//  Copyright (c) 2015年 weconex. All rights reserved.//#import "MJTabBar.h"#import "MJTabBarButton.h"@interface MJTabBar()/** *  记录当前选中的按钮 */@property (nonatomic, weak) UIButton *selectedButton;@end@implementation MJTabBar//创建tabBar按钮-(void)addTabBarWithName:(NSString *)name selName:(NSString *)selName{    MJTabBarButton *button=[MJTabBarButton buttonWithType:UIButtonTypeCustom];        //设置图片    [button setBackgroundImage:[UIImage imageNamed:name] forState:UIControlStateNormal];    [button setBackgroundImage:[UIImage imageNamed:selName] forState:UIControlStateSelected];        //添加    [self addSubview:button];        //监听    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchDown];        //默认选中第0个按钮    if (self.subviews.count==1) {        [self buttonClick:button];    }}//该方法通常是设置控件的尺寸,initWithFrame负责创建控件,initWithFrame下的frame是没有值的。-(void)layoutSubviews{    [super layoutSubviews];    NSUInteger count=self.subviews.count;    for (NSUInteger i=0; i

4.委托页面,实现代理协议。MJTabBarController.m 实现

@interface MJTabBarController () 
@end

5.委托页面,先让自己成为代理,并实现代理方法。MJTabBarController.m 实现:

myTabBar.delegate = self;
- (void)tabBar:(MJTabBar *)tabBar didSelectButtonFrom:(int)from to:(int)to{    // 选中最新的控制器    self.selectedIndex = to;}

委托页面的完整代码:

#import "MJTabBarController.h"#import "MJTabBar.h"@interface MJTabBarController () 
@end@implementation MJTabBarController- (void)viewDidLoad{ [super viewDidLoad]; // 1.添加自己的tabbar MJTabBar *myTabBar = [[MJTabBar alloc] init]; myTabBar.delegate = self; myTabBar.frame = self.tabBar.bounds; [self.tabBar addSubview:myTabBar]; // 2.添加对应个数的按钮 for (int i = 0; i < self.viewControllers.count; i++) { NSString *name = [NSString stringWithFormat:@"TabBar%d", i + 1]; NSString *selName = [NSString stringWithFormat:@"TabBar%dSel", i + 1]; [myTabBar addTabButtonWithName:name selName:selName]; }}/** normal : 普通状态 highlighted : 高亮(用户长按的时候达到这个状态) disable : enabled = NO selected : selected = YES */#pragma mark - MJTabBar的代理方法- (void)tabBar:(MJTabBar *)tabBar didSelectButtonFrom:(int)from to:(int)to{ // 选中最新的控制器 self.selectedIndex = to;}@end

最终运行后的效果:

 

 源代码下载:

 

转载于:https://www.cnblogs.com/jys509/p/4772076.html

你可能感兴趣的文章
html5-表单常见操作
查看>>
Oracle中Union与Union All的区别(适用多个数据库)
查看>>
String = ""和String = null的区别
查看>>
C#测试题若干,都是基础阿
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
如果TCP采用两次握手
查看>>
An easy problem
查看>>
MauiMETA工具的使用(一)
查看>>
LeetCode: Anagrams 解题报告
查看>>
用cookie登录慕课网络教学中心刷评论
查看>>
牛腩新闻视频 回车键的疑惑
查看>>
poj 2965 The Pilots Brothers' refrigerator
查看>>
Mybatis分页插件
查看>>
初学者编程实战指南 (2)- 避免逻辑的重复
查看>>
java技术基础
查看>>
QA系统Match-LSTM代码研读
查看>>
typedef与define宏定义用于声明新的类型之间的区别
查看>>
idea前后端分离搭建 JavaWeb项目
查看>>
python学习笔记 day44 mysql练习题(三)
查看>>
c# 使用ICSharpCode.SharpZipLib.dll实现文件压缩并返回
查看>>