美文网首页
SimpleCalculator简单计算器

SimpleCalculator简单计算器

作者: Mustard_Buli | 来源:发表于2016-03-02 15:08 被阅读103次

    这是开始写的第一个iOS程序。
    1.首先创建一个SingleViewApplication界面(iOS中),这个模式就是默认为我们提供了一个界面。

          

    2.更改项目的名称和icon图标
      ①info.plist文件—>bundle name—>填写自己工程的名字
      ②添加一张图片到这个位置,并且更名为icon.png这样app的图标就改好了。
          


      P.S. icon图标可以去https://www.iconfinder.com 搜索相应地图标(不过有的还需要钱)。

    3.分析过程
      使用并得到UI(User Interface 用户界面)。
      ①实现点击功能:UIButton(按钮)
      ②实现显示内容功能:UILabel(文本标签)
      ③为什么能够显示相应的视图:UIWindow(窗口)
      ④界面(用户能够看到的画面):UIViewController
      ⑤如何实现上面的相应内容(画面版):storyboard

    4.如何实现
      △尺寸:iPhone5/5s: 320568
          iPhone4/4s: 320
    480
      ①设置背景颜色:Main.storyboard-->那个框框中,然后点击这个位置
          

     
      ②添加UILabel
        可以在右下角的这个地方搜索相应控件,直接拖拽到想要摆放的位置就可以。
          
          a.可以自由拖动,调整视图在界面上的大小
          b.改变alignment属性 设置居右对齐
          c.设置font属性 改变文字的显示大小
          d.background 设置背景颜色
          e.text 设置显示的文字
            
      ③添加用于与用户进行交互的按钮UIButton,同样是在右下角进行搜索Button。
      ④如何接收用户的点击事件
        .storyboard里面的每一个界面都应该有相应的控制器和它相关联一个界面就是一个UIViewController。我们这个程序只有一个界面,storyboard里面的界面和viewController相关联。
        .storyboard里面负责界面的布局、viewController负责代码逻辑IBAction(IB interface builder)。用于关联storyboard里面控件的事件。
        .可以用按住Ctrl进行拖拽。
            [图片上传中。。。(6)]
      ⑤在关联类中如何获取storyboard里面的UI对象(通俗点,怎么能通过代码来实现UI对象的功能)
        .IBOutlet 用于关联storyboard里面控件本身
        也可以按住Ctrl进行拖拽,将UILabel拖拽到ViewController.m中。(只用当"insert"提示显示出来的时候才是正确的)
            [图片上传中。。。(7)]
      ⑥如何使用一个数字来区别每一个UI控件
        每一个UI控件都有一个tag属性值,默认值为0。
          [图片上传中。。。(8)]
      当UI控件已经准备完毕之后开始写代码。是在ViewController.m中进行编写。

    代码:

    
    #import "ViewController.h"
    
    typedef enum{
        kStatusNum,
        kStatusOperation
    }kStatus;
    
    typedef enum{
        kOperationTypeAdd = 1,
        kOperationTypeMinus,
        kOperationTypeMultiply,
        kOperationTypeDevide,
        kOperationTypeEqual,
        kOperationTypeNone,
        kOperationTypeSign = 11,
        kOperationTypePercent,
        kOperationTypePoint
    }kOperationType;
    
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UILabel *resultLabel;
    @property (assign, nonatomic) double firstParameter;
    @property (assign, nonatomic) kOperationType lastOperation, isOtherOperation;
    @property (assign, nonatomic) kStatus status;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        //赋初值
        self.lastOperation = kOperationTypeNone;
        self.status = kStatusNum;
        self.isOtherOperation = kOperationTypeNone;
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    //数字键
    - (IBAction)numButtonDidClicked:(UIButton *)sender {
        
        NSMutableString *showNum = [NSMutableString stringWithCapacity:0];
        //进行判断,是输入数字并且上一次操作不是正负
        if (self.status == kStatusNum && self.isOtherOperation != kOperationTypeSign) {
            //进行显示的拼接
            [showNum appendFormat:@"%@%@", self.resultLabel.text, sender.titleLabel.text];
            //判断第一个字符是“0”切第二个字符不为“.”的情况
            BOOL compareResultA, compareResultB;
            
            compareResultA = [self comparationIsEqual:[showNum substringToIndex:1] anotherNSString:@"0"];
            compareResultB = [self comparationIsEqual:[showNum substringWithRange:NSMakeRange(1, 1)] anotherNSString:@"."];
            //这种情况需要删除开头的“0”
            if (compareResultA == YES && compareResultB == NO) {
                [showNum deleteCharactersInRange:NSMakeRange(0, 1)];
            }
            
        } else{
            [showNum appendFormat:@"%@", sender.titleLabel.text];
            self.status = kStatusNum;
            self.isOtherOperation = kOperationTypeNone;
        }
        
        //显示结果
        self.resultLabel.text = showNum;
    }
    
    - (BOOL)comparationIsEqual:(NSString *)StringA anotherNSString:(NSString *)StringB{
        if ([StringA isEqualToString:StringB]) {
            return YES;
        } else{
            return NO;
        }
    }
    
    //+ - * / = 键
    - (IBAction)operationButtonDidClicked:(UIButton *)sender {
        if (self.status != kStatusOperation) {
            self.status = kStatusOperation;
            
            //有两种情况
            //1.第一次按操作,只需要保存这次操作
            if (self.lastOperation != kOperationTypeNone) {
                //2.前面有操作需要计算,保存这次操作
                [self calculate];
            } else{
                //第一个参数输入完毕 保存
                self.firstParameter = [self.resultLabel.text doubleValue];
            }
        }
        
        //保存这一次操作
        if (sender.tag == kOperationTypeEqual) {
            self.lastOperation = kOperationTypeNone;
        } else{
            self.lastOperation = (kOperationType)sender.tag;
        }
    }
    
    //清零
    - (IBAction)clearButtonDidClicked:(UIButton *)sender {
        self.resultLabel.text = @"0";
        self.firstParameter = 0;
        self.lastOperation = kOperationTypeNone;
        self.status = kStatusNum;
        self.isOtherOperation = kOperationTypeNone;
    }
    
    //计算结果
    - (void)calculate{
        //获取第二个参数
        double secondParameter = [self.resultLabel.text doubleValue];
        double result;
        
        switch (self.lastOperation) {
            case kOperationTypeAdd:
                result = self.firstParameter + secondParameter;
                break;
            case kOperationTypeMinus:
                result = self.firstParameter - secondParameter;
                break;
            case kOperationTypeMultiply:
                result = self.firstParameter * secondParameter;
                break;
            case kOperationTypeDevide:
                result = self.firstParameter / secondParameter;
                break;
            default:
                break;
        }
        //显示最终结果
        self.resultLabel.text = [NSString stringWithFormat:@"%g", result];
        
        //当前结果就是写一次的参数值
        self.firstParameter = result;
        
        //更改操作符
        self.lastOperation = kOperationTypeNone;
    }
    
    //± % 键
    - (IBAction)otherOperationButtonDidClicked:(UIButton *)sender {
        double temp;
        //判断按键
        switch (sender.tag) {
            case kOperationTypeSign:
                temp = [self.resultLabel.text doubleValue];
                self.resultLabel.text = [NSString stringWithFormat:@"%g", temp * (-1)];
                self.firstParameter = [self.resultLabel.text doubleValue];
                self.isOtherOperation = kOperationTypeSign;
                break;
            case kOperationTypePercent:
                temp = [self.resultLabel.text doubleValue];
                self.resultLabel.text = [NSString stringWithFormat:@"%g", temp / 100];
                
                break;
            default:
                break;
        }
    }
    
    //. 键
    - (IBAction)pointButtonDidClicked:(UIButton *)sender {
        if (self.isOtherOperation != kOperationTypePoint) {
            self.resultLabel.text = [NSString stringWithFormat:@"%@.", self.resultLabel.text];
            self.isOtherOperation = kOperationTypePoint;
        }
        
    }
    
    @end
    

    最后,请教一下各路大神,小数点的问题有什么更好地想法没有,我觉得自己的解决方案有些繁琐,并不是最简便的。谢谢。Orz~

    相关文章

      网友评论

          本文标题:SimpleCalculator简单计算器

          本文链接:https://www.haomeiwen.com/subject/pcynkttx.html