iPhone计算器

GitHub

计算器

简述

  1. 使用MVC架构,进行整体的架构。
  2. 里面算法部分就是表达式的求值表达式的求值
  3. 使用masonry进行整体布局

MVC架构的相关问题

  • 自定义一个view
    • 里面有TextView这是输入框,即就是显示框,设置需要设置textview的textContainerInset属性,即设置初识输入位置,也就是规定了输入的范围。
_textView.textContainerInset = UIEdgeInsetsMake(60, 0, 10, 0);

这里是,输入的范围距离textview的顶部为60,距离底部为10,宽和textview的宽是一样的。
设置button,这里有很多的button,需要一个一个设置,并且是设置tag,用于区分。然后放到一个数组中,使用循环设置一些共同的特点,减少代码量

for (UIButton *button in _buttonArray) {
            if (button.tag >= 100 && button.tag <= 120) {
                button.titleLabel.font = [UIFont systemFontOfSize:40];
            }
            
            if (button.tag >= 100 && button.tag < 103) {
                button.tintColor = [UIColor blackColor];
                button.backgroundColor = [UIColor colorWithRed:0.65f green:0.65f blue:0.65f alpha:1.00f];
                
            }
            
            //加减乘除的颜色设置
            if (button.tag >= 103 && button.tag <= 107) {
                [button setTintColor:[UIColor whiteColor]];
                button.backgroundColor = [UIColor colorWithRed:0.96f green:0.53f blue:0.00f alpha:1.00f];
            }
            
            //数字的颜色设置
            if (button.tag >= 110) {
                [button setTintColor:[UIColor whiteColor]];
                button.backgroundColor = [UIColor colorWithRed:0.20f green:0.20f blue:0.20f alpha:1.00f];
            }
            
            //设置外形
            if (button.tag >= 100 && button.tag != 110 && button.tag <= 120 ) {
                button.layer.cornerRadius = 45;
            } else {
                button.layer.cornerRadius = 35;
            }
        }
    }

还有就是在controller中添加点击事件也用for- in语句进行添加,也就是许多的button使用一个方法,在方法里传入buton,通过不同的tag来区分,进行不一样的操作。

-(void)clickButton:(UIButton *)button {
    if (button.tag == 100) {
       .......
    } else if (button.tag == 107) {
 		.......
    } else if (button.tag == 103) {
    	.......
    } else {
        ........
    }
}
  • Model中的相关算法处理
    在controller中将输入的表达式传入,这里使用之前用c语言写的表达式求值的进行求值,所以首先将传入的NSString转换为char型数组
const char *mess;
mess = [_messageString cStringUsingEncoding:NSUTF8StringEncoding];

然后就和c语言一样了
最后将结果再次转化

_result = [NSNumber numberWithFloate:GetNum(num_top)];
  • controller 中主要是进行view与model之间的链接。
    比如将输入的字符串传入model中,将计算的结果显示在输入框中。
//传入Model
_calculatorModel.messageString = _dataString;
//传出结果
NSString *str = [NSString stringWithFormat:@"%@", self.calculatorModel.result];

注意点

  • 要判断输入的表达式的合法性,连续的运算符,括号不匹配等问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值