记录一下最近写的一个计算器APP。
实现包含括号以及四则运算的简单计算器,利用MVC设计模式以及Masonry布局。
实现界面:
首先实现这个界面到了之前学过的Masonry第三方库,对按钮进行了屏幕比例的限制。
遇见的一些问题
在MVC设计模式中Button事件的处理
根据MVC的设计模式,Button事件应该加在C的代码中,这里一开始没有好的思路,后来问了下学长,学了一手。、
我们可以利用协议传值,在V的代码中添加事件,但事件函数是在C中实现的,每次点击Button时,C可以得到Button的tag值,以进行下一步处理。
部分代码:
// View.h
// 计算器
//
// Created by 差不多先生 on 2021/10/6.
//
#import <UIKit/UIKit.h>
@protocol viewDelegate <NSObject>
- (void) pressChange: (UIButton*) cButton;
@end
[_zeroButton addTarget:self action:@selector(return:) forControlEvents:UIControlEventTouchUpInside];
- (void) return: (UIButton*) cButton {
[_delegate pressChange:cButton];
}
// 在c中实现的pressChange:方法
// 记录小数点状态
int flag = 0;
// 防止连续输入符号
int secondFlag = 0;
// 记录等于号状态
int thirdFlag = 0;
// 防止连续输入zero
int zeroFlag = 0;
- (void) pressChange: (UIButton*) cButton {
if (cButton.tag == 101) {
[_changeArray removeAllObjects];
NSString *ansString = @"0";
_firstView.topLabel.text = ansString;
flag = 0;
secondFlag = 0;
thirdFlag = 0;
} else if (cButton.tag == 120) {
if (thirdFlag == 1) {
;
} else {
[_changeArray addObject:@"#"];
NSString *ansString = [_changeArray componentsJoinedByString:@""];
// NSLog(@"%@", ansString);
[_firstModel operation:ansString];
_firstView.topLabel.text = [_firstModel operation:ansString];;
[_changeArray removeAllObjects];
thirdFlag = 1;
}
} else if (cButton.tag == 119) {
//控制小数点输入合理
if (flag == 0) {
flag = 1;
[