GitHub
简述
- 使用MVC架构,进行整体的架构。
- 里面算法部分就是表达式的求值表达式的求值
- 使用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];
注意点
- 要判断输入的表达式的合法性,连续的运算符,括号不匹配等问题。