iOS 5.0开发 第一个小程序:计算器
学习斯担福大学2011年秋季iOS 5.0开发视频教程第二课写的,目前没中文字幕,大学英语四级没过的人伤不起,英文字幕加Google翻译。
最终效果图:
与视频教程中的代码稍有不同,那个每输入一个数字,要按enter确认,没看完视频教程的时候,我一直搞不明白为什么要那么写,看完了才知道。
新建Single View Application项目Calculator,类前缀Calculator
CalculatorAppDelegat两个文件均为自动生成未修改。
新建一个Objective-C Class,名为CalculatorBrain,这个就是MVC模式中的Model,所有的数据处理都在这里,CalculatorViewController取到数据后,作简单的转换以符合Model的要求,再传给Model,由Model处理完返回处理结果给Controller,再由Controller更新View.
CalculatorBrain.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// // CalculatorBrain.h // Calculator // // Created by fhp on 12-2-17. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject -(void)operate:(double) num1:(NSString *) operaString; //接收第一个数字和操作符 -(double)calculate:(double) num2; //接收第二个数字,并计算,返回计算结果 @end |
CalculatorBrain.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
// // CalculatorBrain.m // Calculator // // Created by fhp on 12-2-17. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import "CalculatorBrain.h" @interface CalculatorBrain() //定义私有属性 @property (nonatomic) double result; //储存执行结果 @property (copy,nonatomic) NSString * tempOperaString; //存储操作符 @end @implementation CalculatorBrain @synthesize result=_result,tempOperaString=_tempOperaString; -(void)operate:(double) num1:(NSString *) operaString { _result=num1; _tempOperaString=operaString; } -(double)calculate:(double) num2 { //根据操作符执行相应的计算 if([_tempOperaString isEqualToString:@"+"]) { _result+=num2; }else if([_tempOperaString isEqualToString:@"-"]) { _result-=num2; }else if([_tempOperaString isEqualToString:@"*"]) { _result*=num2; }else if([_tempOperaString isEqualToString:@"/"]) { if (num2==0) { _result=0; }else{ _result/=num2; } } return _result; //返回结果 } @end |
CalculatorViewController.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// // CalculatorViewController.h // Calculator // // Created by fhp on 12-2-17. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import <UIKit/UIKit.h> @interface CalculatorViewController : UIViewController - (IBAction)digiPressed:(id)sender; //数字键按下操作 - (IBAction)operatePressed:(id)sender; //操作符按下操作 - (IBAction)enterPressed:(id)sender; //等于号按下操作 @property (weak, nonatomic) IBOutlet UILabel *display; //显示输入和结果的属性 @end |
CalculatorViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
// // CalculatorViewController.m // Calculator // // Created by fhp on 12-2-17. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import "CalculatorViewController.h" #import "CalculatorBrain.h" @interface CalculatorViewController() //把私有的方法和属性定义在这 @property (nonatomic) BOOL isEntering; //数字输入的状态,指明之前是否正在输入数字 @property (strong,nonatomic) CalculatorBrain * brain; //Model,CalculatorViewController是一个Controller, //为了符合MVC模式,需要把数据传送给Model,即这里的CalculatorBrain类处理,CalculatorBrain //返回计算结果给CalculatorViewController @end @implementation CalculatorViewController @synthesize display = _display; @synthesize isEntering=_isEntering; @synthesize brain=_brain; -(CalculatorBrain *) brain { //重写brain属性的getter方法,在该方法中初始化CalculatorBrain实例 if(!_brain)_brain=[[CalculatorBrain alloc] init]; return _brain; } - (void)viewDidUnload { [self setDisplay:nil]; [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (IBAction)digiPressed:(UIButton *)sender { //按到数字键时执行 if(self.isEntering==YES) { //如果之前已经是在输入的状态 if([_display.text length]<12) { //如果之前输入的数字少于12位 self.display.text = [self.display.text stringByAppendingString:[sender currentTitle]]; //把按到的数字转成字符串加到原来显示的字符串的未尾,并更新显示 }else{ //如果输入的数字大于等于12位,不操作,直接返回 return; } }else{ //如果之前不是输入状态,即现在输入的是数字的第一位(最高位) self.display.text=[sender currentTitle]; //显示输入的数字 self.isEntering=YES; //把输入状态改为YES } } - (IBAction)operatePressed:(UIButton *)sender { //操作符被按下时执行 self.isEntering=NO; // 把输入状态改为NO double num=[self.display.text doubleValue]; //取到显示的数字,转换为double [self.brain operate:num :[sender currentTitle]]; //把数字和操作符发送给CalculatorBrain的opera接收器 } - (IBAction)enterPressed:(id)sender { //等号键被按下 self.isEntering=NO; //把输入状态改为NO double num=[self.display.text doubleValue]; //取到显示的数字,转换为double double result=[_brain calculate:num]; //把数字发送给CalculatorBrain的calculate接收器,并接收返回的结果 self.display.text=[NSString stringWithFormat:@"%g",result]; //把结果显示在屏幕上 } @end |