您的位置:首页 > 移动开发 > IOS开发

iOS简易计算器的实现

2015-04-29 21:03 134 查看
先建一个工程,

使用MVC模式,建一个视图,并给它建立一个XIB来拖控件,这样比较方便布局。



用VIewController来控制计算器视图这个View,

把XIB中的控件按住Ctrl拖到该View的.h文件中,



写一个协议方法,对点击的按钮在ViewController中行操作。

CalculatorView.h文件

//
// CalculatorView.h
// try_Calculator计算器
//
// Created by Bear on 15/4/28.
// Copyright (c) 2015年 Bear. All rights reserved.
//

#import <UIKit/UIKit.h>

@protocol CalculateUnit <NSObject>

- (void)pressedUnitValue:(NSInteger)buttonOfTag;

@end

@interface CalculatorView :UIView

@property (strong,nonatomic)
IBOutletUITextField *resultTextField;

@property (nonatomic,assign)id<CalculateUnit>delegate;

- (instancetype)init;

@end

CalculatorView.m文件

//把按钮的tag值传过去

#import "CalculatorView.h"

@implementation CalculatorView
- (instancetype)init
{

return [[[NSBundlemainBundle]
loadNibNamed:@"CalculatorView"owner:selfoptions:nil]firstObject];
}

- (IBAction)ceButton:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)divButton:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)mulButton:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)decButton:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)addButton:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)delButton:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf7:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf8:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf9:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf4:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf5:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf6:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf1:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf2:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf3:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOf0:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOfPoint:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

- (IBAction)buttonOfEqual:(UIButton *)sender {

[self.delegatepressedUnitValue:sender.tag];
}

@end

重点介绍ViewController中的计算方法,这里计算的方法比较简单,只可以一个个的加。
ViewController.m文件

#import "ViewController.h"
#import "CalculatorView.h"

@interface
ViewController () <CalculateUnit>
{

CalculatorView * _calculatorView;
NSMutableString * _numberString;
NSMutableString * _firstString;
NSMutableString * _sencondString;
NSMutableString * _resultString;
double _firstNum;
double _sencondNum;
double _resultNum;
NSString * _symbol;

}
@end

@implementation ViewController

- (void)viewDidLoad {
[superviewDidLoad];

self.navigationItem.title =@"计算器";
_calculatorView = [[CalculatorViewalloc]
init];
_calculatorView.frame =CGRectMake(0,0,
375,667);
_calculatorView.delegate =self;//设置代理
[self.viewaddSubview:_calculatorView];

_symbol = [[NSStringalloc]
init];//记录运算的符号
_numberString = [[NSMutableStringalloc]
init];
_firstString = [[NSMutableStringalloc]
init];
_sencondString = [[NSMutableStringalloc]
init];
_resultString = [[NSMutableStringalloc]
init];
_firstNum =0.0;
_sencondNum =0.0;
_resultNum =0.0;

}

- (void)pressedUnitValue:(NSInteger)buttonOfTag//协议方法
{
switch (buttonOfTag) {
case99:
case100:
case101:
case102:
case103:
case104:
case105:
case106:
case107:
case108:
case109:

[selfpressedNumberButton:(buttonOfTag -100)];
//点击了数字按钮
break;

case110:
[selfpressedEmptyButton];//点击了清空按钮
break;

case111: //除
{
if (_resultString.length ==0)
{//长度为0说明为第一次运算

_firstString =_numberString;
}else{

_firstString =_resultString;//第二次运算则把上一次的结果当作第一个数来运算
}
_firstNum = [_firstStringdoubleValue];
[_numberStringsetString:@""];
_symbol =@"/";
_calculatorView.resultTextField.text =_symbol;
}
break;

case112: //乘
{
if (_resultString.length ==0)
{

_firstString =_numberString;
}else{

_firstString =_resultString;
}
_firstNum = [_firstStringdoubleValue];
[_numberStringsetString:@""];
_symbol =@"X";
_calculatorView.resultTextField.text =_symbol;
}
break;

case113:
[selfpressedDelButton];
break;

case115: //减
{
if (_resultString.length ==0)
{

_firstString =_numberString;
}else{

_firstString =_resultString;
}
_firstNum = [_firstStringdoubleValue];
[_numberStringsetString:@""];
_symbol =@"-";
_calculatorView.resultTextField.text =_symbol;
}
break;

case116:
//加
{
if (_resultString.length ==0)
{

_firstString =_numberString;
}else{

_firstString =_resultString;
}
_firstNum = [_firstStringdoubleValue];
// NSLog(@"_firstString = %@",_firstString);
[_numberStringsetString:@""];
_symbol =@"+";
_calculatorView.resultTextField.text =_symbol;
}
break;

case117:
//等号(计算)
[selfpressedCalculateButton];
break;

default:
break;
}

}

//点击了删除按钮
- (void)pressedDelButton
{
if (![_calculatorView.resultTextField.textisEqualToString:@""])
{
[_numberStringdeleteCharactersInRange:NSMakeRange([_numberStringlength]
- 1,1)];//从字符串的最后一个字符一个个清除
_calculatorView.resultTextField.text =_numberString;
}

}

//点击了清空按钮
- (void)pressedEmptyButton
{

//清空所有记录
[_numberString setString:@""];
[_firstStringdeleteCharactersInRange:NSMakeRange(0,_firstString.length)];//可用上面的一种方法清空setString:@""
[_resultStringdeleteCharactersInRange:NSMakeRange(0,_resultString.length)];
_firstNum =0.0;
_sencondNum =0.0;
_resultNum =0.0;
_calculatorView.resultTextField.text =_numberString;

}

//点击了计算按钮
- (void)pressedCalculateButton
{

_sencondNum = [_numberStringdoubleValue];
if ([_symbolisEqualToString:@"+"])
{

_resultNum =_firstNum +
_sencondNum;
[_resultStringdeleteCharactersInRange:NSMakeRange(0,_resultString.length)];//每次计算时都把上一次的计算结果字符串清空再赋值
[_resultStringappendFormat:@"%f",_resultNum];
_calculatorView.resultTextField.text = [NSStringstringWithFormat:@"%f",_firstNum+_sencondNum];//显示出计算的结果

}elseif ([_symbolisEqualToString:@"-"])
{

_resultNum =_firstNum -
_sencondNum;
[_resultStringdeleteCharactersInRange:NSMakeRange(0,_resultString.length)];
[_resultStringappendFormat:@"%f",_resultNum];
_calculatorView.resultTextField.text = [NSStringstringWithFormat:@"%f",_firstNum
-_sencondNum];
}elseif ([_symbolisEqualToString:@"X"])
{

_resultNum =_firstNum *
_sencondNum;
[_resultStringdeleteCharactersInRange:NSMakeRange(0,_resultString.length)];
[_resultStringappendFormat:@"%f",_resultNum];
_calculatorView.resultTextField.text = [NSStringstringWithFormat:@"%f",_firstNum
*_sencondNum];
}elseif ([_symbolisEqualToString:@"/"])
{

_resultNum =_firstNum /
_sencondNum;
[_resultStringdeleteCharactersInRange:NSMakeRange(0,_resultString.length)];
[_resultStringappendFormat:@"%f",_resultNum];
_calculatorView.resultTextField.text = [NSStringstringWithFormat:@"%f",_firstNum
/_sencondNum];
}

_firstString =_resultString;//把上一次的结果赋给输入的第一个字符串
}

//点击了数字按钮
- (void)pressedNumberButton:(NSInteger)number
{
if (number == -1) {//点击了小数点
[_numberStringappendString:@"."];//拼接字符串得到最后输入的数字
_calculatorView.resultTextField.text =_numberString;
}else {

[_numberStringappendFormat:@"%ld",number];
_calculatorView.resultTextField.text =_numberString;
}
// NSLog(@"%@",_numberString);
}

@end

最后的效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: