项目小分析------从 优普钱包工资单 谈代码的规范性和界面的一般写法

先上个图片,因为本录屏是请求的真实数据,所以没有全屏录制

 

这个是16年那时候的版本。那时候业务逻辑简单,界面只有三个。

下面介绍下这个钱包。

分为定期理财,活期理财,个人信息三大界面

里面集成了有十来个银行的支付通道接口。

随着业务的扩大,现在里面的通道又增加了。

 

一、工资单逻辑分析

月份日历展示,可以显示每年12个月,而且当前月之后的月份是置灰不可点击的。

上面的按钮可以切换年

日历消失后,下面也有按钮来切换月份

如果遇到某月 人力没有上传工资单,就提示“本月暂时没有工资单”

这个里面  实现也很简单,主要是设置几个全局变量,来实现不同view的数据联动

二、部分工资单的代码

这个完全是本人一个字母一个字母写出来的

时间久了,也不优化了,纯属给大家提供个思路

部分代码如下

 

首先要引入头文件 

#import "SalaryViewController.h"

#import "SalaryBillTableViewCell.h"

#import "BQAlertView.h"

 

@interface SalaryViewController ()<UIScrollViewDelegate,UITableViewDataSource,UITableViewDelegate>

需要多处引用的按钮等控件设置成全局变量,好的习惯应该是  把每个按钮都写成英文形式  ,而不能向下面那样写  lab1  lab2等,这样在过了一段时间后会很难读懂。这里为了保证程序运行,就不费时间改回来了,主要目的是告诉大家如何使代码变得整洁  易读

写程序最重要的注意它的   可读性(可读性强了,可维护性才高) 鲁棒性   可扩展性

 

命名要类似这个   这个 一看就是  当前月份的工资数目(因为当时需求定的可能一个月有多个工资单,所以设置一个这个变量来作为扩展备用)

@property(nonatomic,assign)int currentMonthSalaryNum;

@end

 

 

@implementation SalaryViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

 

这里一目了然,第一部分创建界面

     [self creatUI];    

第二部分展示数据

     [self showSalaryAtDate:@""];

}

-(void)showSalaryAtDate:(NSString *)datea{

    if ([self serverIsReachable]) {

请求数据      成功后  刷新 工资单

    }else {

        [self connectFailed];

        [self hideBgView];

    }

    

}

 

 

 可以理解为刷新数据的   方法

-(void)resetUI3{

//    这个lab 仅仅是 tableView3 的标题

    for (UITableView * view in self.salaryView1.subviews) {

 

//因为当时需求 每个月算上奖金,可能有多个工资单 需要做成左右滑动的形式,因此,准备了三个table,想要用来 循环利用(类似三张轮播图无限循环轮播的原理) 后来,安卓那个哥们说做不了左右滑动的形式,得了为了保持统一,我就也不做了就只留了个tableView3,tableView1和tableView2注释掉,留着万一日后扩展用。其实这个命名还可以改下,比如 改成 self.salaryTableView3

        if (view != self.tableView3) {

            [view removeFromSuperview];

        }

    }

    

    

    if (self.currentMonthSalaryNum > 1) {

        self.salaryView1.pagingEnabled = YES;

        for (int i = 1; i< self.currentMonthSalaryNum; i++) {

            UITableView * tableView = [self createTableViewWithFrame:CGRectMake(i*kScreenWidth, 0, kScreenWidth, self.salaryView1.size.height) andTag:(i + 3) andGongZiNum:(i + 1)];

            [self.salaryView1 addSubview:tableView];

        }

        lab.text = @"工资单1";

 多个工资单 显示左右切换工资单 按钮

    }else{

        lab.text = @"工资单";     

 单个工资单 不显示左右切换工资单 按钮

    }

}

 

 

-(void)reloadTableViewData{

    self.tableView3.contentOffset = CGPointMake(0, 0);

    for(UIView * view in self.salaryView1.subviews){

        if ([view isKindOfClass:[UITableView class]]) {

            [(UITableView *)view reloadData];

        }

    }

    

}

 

//创建初始控件  这个最好优化成懒加载的形式

-(void)creatUI{

   self.salaryView1 = [[UIScrollView alloc]initWithFrame:CGRectMake(0, kScreenWidth*311/750.0, kScreenWidth, kScreenHeight - 64 - kScreenWidth*311/750.0)];

    [self.view addSubview:self.salaryView1];

    

    self.tableView3 = [self createTableViewWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight - 64 - kScreenWidth*311/750.0) andTag:3 andGongZiNum:1];

    [self.salaryView1 addSubview:self.tableView3];

    

}

 

#pragma mark 简洁创建 UITableView

-(UITableView *)createTableViewWithFrame:(CGRect)frame andTag:(NSInteger)tag andGongZiNum:(int)num {

    UITableView * tableView = [[UITableView alloc]initWithFrame:frame style:UITableViewStyleGrouped];

    tableView.dataSource = self;

    tableView.delegate = self;

    

    

有多个工资单的时候 显示 是  第几个工资单

    if (num > 1) {

        lab.text = [NSString stringWithFormat:@"工资单%d", num];

    }else{

        lab.text = @"工资单";

    }

    [view addSubview:lab];

    return tableView;

}

-(void)lastBill{

    int x =  self.salaryView1.contentOffset.x;

    if (x > 0) {

        x -= kScreenWidth;

        self.salaryView1.contentOffset = CGPointMake(x, 0);

    }

}

-(void)nextBill{

    int x =  self.salaryView1.contentOffset.x;

    if (x < (self.currentMonthSalaryNum - 1)*kScreenWidth) {

        x += kScreenWidth;

        self.salaryView1.contentOffset = CGPointMake(x, 0);

    }

}

 

#pragma mark 显示日历

-(void)showCalendar{

}

-(void)hideBgView{

    }

#pragma mark 点击左右按钮之后的方法调用

-(void)backToLastMonth{

}

 

-(void)gotoNextMonth{

}

 

-(void)backToLastYear{

}

-(void)gotoNextYear{

}

 

-(void)btnClick:(NeeButton *)btn{

 

}

 

-(void)reLoadBtn{

 

}

 

-(NSString *)getSysDate{

    return [NSString stringWithFormat:@"%@%@",[self getSysYear], [self getSysMonth]];

}

-(NSString *)getSysYear{

    

}

-(NSString *)getSysMonth{

}

 

 

#pragma mark 跳到工资流水

-(void)gotoGZWater{

//    NSLog(@"shui water");

    if (![InfoModel getInstance].isLoginSucceed) {

        [self checkLogin];

        return;

    }

    if (self.data == nil) {//如果活期产品没有 提示用户

        [SGInfoAlert showInfo:@"数据错误,请重试" bgColor:[[UIColor darkGrayColor] CGColor] inView:[[[UIApplication sharedApplication] delegate] window] vertical:0.7];

        return;

    }

    if ([self serverIsReachable]) {

        

        NSDictionary *dict = @{

                               @"USER_NAME":[InfoModel getInstance].NAME,

                               @"ID_NO":[InfoModel getInstance].ID_NO,

                               @"PROFLAG" : @"1"

                               

                               };

        JSWebViewController *vc = [[JSWebViewController alloc] initWithPath:HTML_DetailQuery/*[[MenuManager getInstance].menuDict objectForKey:@"交易记录"]*/ data:dict];

        vc.hidesBottomBarWhenPushed = YES;

        [self.navigationController pushViewController:vc animated:YES];

        

        

    }

    else {

        [self connectFailed];

    }

 

}

 

- (void)setLeftBarButtonItem {

  

}

 

#pragma mark - 代理

 

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{

    return 0.01;

}

 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return 0;

}

 

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

   

    return cell;

}

 这个是准备放了三个table在scroll里面左右滑动用的,结果没用到,但是要留着以防以后需求变更

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

   

}

@end

 

上面的代码仔细研究的话还有很多需要优化的。本次  主要给大家分享下,界面的一般写法。如何巧妙的联动数据。

关于如何规范代码书写,有很多人有很多规范。

基本的规范可以参考这个:

https://www.cnblogs.com/isItOk/p/8550989.html

希望对大家有用。

这个是纯手写,有需要的欢迎转载

 

posted on 2015-10-12 18:57  &#127774;Bob  阅读(516)  评论(0编辑  收藏  举报

导航