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
最后的效果图:
使用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
最后的效果图:
相关文章推荐
- iOS简易计算器的实现
- ios开发,利用4种UI元素告诉你,怎样实现优化建议及可用性问题
- iOS用三个手势和仿射变换实现图片的旋转缩放移动效果(类iBooks教科书)
- IOS内存管理--自动释放池的实现原理
- iOS 尝试用 block 闭包 去代替delegate 实现方法
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- ios-猜拳游小戏的实现
- iOS开发进阶 - 实现类似微信和支付宝的密码输入框(UIKeyInput协议)
- iOS实现微信/QQ显示最近拍摄图片的功能实例代码
- iOS录音功能的实现
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- iOS-提示框的正确实现方式(iOS9)
- nginx与ios实现https双向认证
- iOS应用内一键拨打电话的2种实现方式
- iOS 开发之实现调用电话功能代码
- iOS微信第三方登录实现
- iOS self、super底层实现原理
- iOS 基础篇7—实现UItableview控件数据刷新
- 基于IOS实现带箭头的view
- Swift实现IOS界面的跳转