ios基礎控件之簡單計算器

前言

爲了打好基礎,業餘時刻寫了一個,簡易的計算器,純代碼界面,個人不喜歡xcode的故事板,沒有Android studio實施顯示。

先上效果:

在這裏插入圖片描述

控件代碼

    var input:UILabel!
    var bu1:UIButton!
    var bu2:UIButton!
    var bu3:UIButton!
    var bu4:UIButton!
    var bu5:UIButton!
    var bu6:UIButton!
    var bu7:UIButton!
    var bu8:UIButton!
    var bu9:UIButton!
    var bu0:UIButton!
    var add:UIButton!
    var jian:UIButton!
    var cheng:UIButton!
    var chu:UIButton!
    var dengyu:UIButton!
    var rest:UIButton!

聲明各種變量,並且每個變量的類型是UIbutton和UIlable類型。爲下文做鋪墊。

佈局每個按鈕的位置

        let kuan = self.view.bounds.width
        let gao = self.view.bounds.height

首先獲取本地根視圖的寬和高 爲下文做鋪墊。

  input=UILabel(frame: CGRect(x: 10, y: 35, width: kuan-20, height: gao/5-35))
        input.backgroundColor=UIColor.white
        input.layer.cornerRadius=10
        input.layer.borderWidth=2
        self.view.addSubview(input)

這是一個用來顯示數據的文本,類似android的textview,聲明此控件在視圖的頂部,並且距離頂部35 距離左邊0 控件的寬度是 根視圖-20 高是根視圖除5-35 因爲我們頁面的佈局是 五行 四列 所以除五。

 rest=UIButton(frame: CGRect(x: 0, y: gao/5+5, width: kuan/4, height: gao/5))
        rest.backgroundColor=UIColor.brown
        rest.setTitle("重置", for: .normal)
        rest.addTarget(self, action: #selector(jieguo), for: .touchDown)
        rest.tag=0
        self.view.addSubview(rest)
        
        add=UIButton(frame: CGRect(x: rest.bounds.width+10  , y: gao/5+5, width: kuan/4, height: gao/5))
        add.backgroundColor=UIColor.brown
        add.setTitle("加", for: .normal)
        add.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(add)
        
        jian=UIButton(frame: CGRect(x: (rest.bounds.width)*2+15, y: gao/5+5, width: kuan/4, height: gao/5))
        jian.backgroundColor=UIColor.brown
        jian.setTitle("減", for: .normal)
        jian.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(jian)

        cheng=UIButton(frame: CGRect(x: (rest.bounds.width)*3+20, y: gao/5+5, width: kuan/4, height: gao/5))
        cheng.backgroundColor=UIColor.brown
        cheng.setTitle("乘", for: .normal)
        cheng.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(cheng)
        
        chu=UIButton(frame: CGRect(x: 0, y: (gao/5)*2+10, width: kuan/4, height: gao/5))
        chu.backgroundColor=UIColor.brown
        chu.setTitle("除", for: .normal)
        chu.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(chu)

和上面類似。(+,-,*,/)

 bu0=UIButton(frame: CGRect(x: rest.bounds.width+10, y: (gao/5)*2+10, width: kuan/4, height: gao/5))
        bu0.backgroundColor=UIColor.cyan
        bu0.setTitle("0", for: .normal)
        bu0.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu0)
        
        bu1=UIButton(frame: CGRect(x: (rest.bounds.width)*2+15, y: (gao/5)*2+10, width: kuan/4, height: gao/5))
        bu1.backgroundColor=UIColor.cyan
        bu1.setTitle("1", for: .normal)
        bu1.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu1)
        
        bu2=UIButton(frame: CGRect(x: (rest.bounds.width)*3+20, y: (gao/5)*2+10, width: kuan/4, height: gao/5))
        bu2.backgroundColor=UIColor.cyan
        bu2.setTitle("2", for: .normal)
        bu2.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu2)
        
        bu3=UIButton(frame: CGRect(x: 0, y: (gao/5)*3+15, width: kuan/4, height: gao/5))
        bu3.backgroundColor=UIColor.cyan
        bu3.setTitle("3", for: .normal)
        bu3.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu3)
        
        bu4=UIButton(frame: CGRect(x: rest.bounds.width+10, y: (gao/5)*3+15, width: kuan/4, height: gao/5))
        bu4.backgroundColor=UIColor.cyan
        bu4.setTitle("4", for: .normal)
        bu4.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu4)
        
        bu5=UIButton(frame: CGRect(x: (rest.bounds.width)*2+15, y: (gao/5)*3+15, width: kuan/4, height: gao/5))
        bu5.backgroundColor=UIColor.cyan
        bu5.setTitle("5", for: .normal)
        bu5.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu5)
        
        bu6=UIButton(frame: CGRect(x: (rest.bounds.width)*3+20, y: (gao/5)*3+15, width: kuan/4, height: gao/5))
        bu6.backgroundColor=UIColor.cyan
        bu6.setTitle("6", for: .normal)
        bu6.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu6)
        
        bu7=UIButton(frame: CGRect(x: 0, y: (gao/5)*4+20, width: kuan/4, height: gao/5))
        bu7.backgroundColor=UIColor.cyan
        bu7.setTitle("7", for: .normal)
        bu7.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu7)
        
        bu8=UIButton(frame: CGRect(x: (rest.bounds.width)+10, y: (gao/5)*4+20, width: kuan/4, height: gao/5))
        bu8.backgroundColor=UIColor.cyan
        bu8.setTitle("8", for: .normal)
        bu8.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu8)
        
        bu9=UIButton(frame: CGRect(x: (rest.bounds.width)*2+15, y: (gao/5)*4+20, width: kuan/4, height: gao/5))
        bu9.backgroundColor=UIColor.cyan
        bu9.setTitle("9", for: .normal)
        bu9.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(bu9)
        
        dengyu=UIButton(frame: CGRect(x: (rest.bounds.width)*3+20, y: (gao/5)*4+20, width: kuan/4, height: gao/5))
        dengyu.backgroundColor=UIColor.brown
        dengyu.setTitle("=", for: .normal)
        dengyu.addTarget(self, action: #selector(jieguo), for: .touchDown)
        self.view.addSubview(dengyu)

注意此處的點擊事件,我們根據每個控件的變量來爲lable設置數據 。

@objc func jieguo(buttom:UIButton){
            
            switch buttom {
                case  bu0:
                    let bu00 = bu0.currentTitle
                    let input1 = input.text ?? ""
                    input.text = input1+bu00!
                    break
                case  bu1:
                    let bu11 = bu1.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu11!
                  break
                case  bu2:
                    let bu00 = bu2.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                case  bu3:
                    let bu00 = bu3.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                case  bu4:
                    let bu00 = bu4.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                case  bu5:
                    let bu00 = bu5.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                case  bu6:
                    let bu00 = bu6.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                case  bu7:
                    let bu00 = bu7.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                case  bu8:
                    let bu00 = bu8.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                
                case  bu9:
                    let bu00 = bu9.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break
                
                case  add:
                    let bu00 = add.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu00!
                    break

                case  jian:
                     let bu00 = jian.currentTitle
                     let input1 = input.text
                     input.text = input1!+bu00!
                     break

                case  cheng:
                     let bu00 = cheng.currentTitle
                     let input1 = input.text
                     input.text = input1!+bu00!
                     break

                case  chu:
                     let bu00 = chu.currentTitle
                     let input1 = input.text
                     input.text = input1!+bu00!
                     break
                
                case  rest:
                    input.text=""
                    break

                case  dengyu:
                    jieguo1()
                    break
            default:
                print("sadd")
            }
      
    }

這裏主要就是 把原來顯示和現在輸入的進行重新顯示。

邏輯代碼

 func jieguo1() {
        if let jieguook = input.text{
            if jieguook.contains("加"){
                yunsuan(xx:"加" , jieguook: jieguook)
            }
            if jieguook.contains("減"){
                yunsuan(xx:"減" , jieguook: jieguook)
                       }
            if jieguook.contains("乘"){
                yunsuan(xx:"乘" , jieguook: jieguook)
                       }
            if jieguook.contains("除"){
                yunsuan(xx:"除" , jieguook: jieguook)
                       }
        }
       
    }
    
    
            
    func yunsuan(xx:String,jieguook:String){
        let range: Range = jieguook.range(of: xx)!
        let location: Int = jieguook.distance(from: jieguook.startIndex, to: range.upperBound)
        let subStr = Int(jieguook.suffix(jieguook.count - location))
         
         
        let range1: Range = jieguook.range(of: xx)!
        let location1: Int = jieguook.distance(from: jieguook.startIndex, to: range1.lowerBound)
        let subStr1 = Int(jieguook.prefix(location1))
        
        switch xx {
            case "加":
                let num = subStr!+subStr1!
                input.text = String(num)
            break
            case "減":
                let num = subStr! - subStr1!
                input.text = String(num)
            break
            case "乘":
                let num = subStr! * subStr1!
                input.text = String(num)
            break
            case "除":
                let num = subStr! / subStr1!
                input.text = String(num)
            break
            
        default:
            print("錯誤!!")
        }
     
        
    }

當你點擊等於的時候 ,我們進行截取lable中顯示的 數據,要求是根據 + - * /來截取,之前和之後的內容 並且轉換爲 int類型 進行加減乘除 。

主要知識

input=UILabel(frame: CGRect(x: 10, y: 35, width: kuan-20, height: gao/5-35))
input.backgroundColor=UIColor.white
        input.layer.cornerRadius=10
        input.layer.borderWidth=2
        self.view.addSubview(input)

1,lable的基本座標
2,lable的圓角邊框
3,lable的邊框寬度
4,lable的背景顏色

rest=UIButton(frame: CGRect(x: 0, y: gao/5+5, width: kuan/4, height: gao/5))
        rest.backgroundColor=UIColor.brown
        rest.setTitle("重置", for: .normal)
        rest.addTarget(self, action: #selector(jieguo), for: .touchDown)
        rest.tag=0
        self.view.addSubview(rest)

1,button的點擊事件
2,button的傳值
3,button的背景色

                    let bu11 = bu1.currentTitle
                    let input1 = input.text
                    input.text = input1!+bu11!

1,獲取button控件的值
2,獲取lable的值
3,設置lable的值

let range: Range = jieguook.range(of: xx)!
        let location: Int = jieguook.distance(from: jieguook.startIndex, to: range.upperBound)
        let subStr = Int(jieguook.suffix(jieguook.count - location))

根據lable的值截取xx之後的值

let range1: Range = jieguook.range(of: xx)!
        let location1: Int = jieguook.distance(from: jieguook.startIndex, to: range1.lowerBound)
        let subStr1 = Int(jieguook.prefix(location1))

根據lable的值截取xx之前的值

並且轉換爲Int類型

switch xx {
            case "加":
                let num = subStr!+subStr1!
                input.text = String(num)
            break
            case "減":
                let num = subStr! - subStr1!
                input.text = String(num)
            break
            case "乘":
                let num = subStr! * subStr1!
                input.text = String(num)
            break
            case "除":
                let num = subStr! / subStr1!
                input.text = String(num)
            break
            
        default:
            print("錯誤!!")
        }

根據xx來判斷 相應的運算 並顯示在lable上 lable的值是string類型 所以還要轉換爲string類型。

總結

寫的不好,該優化的沒有優化 ,並且個人不喜歡用xcode故事板 原因xcode不能實時顯示界面佈局。

下一篇:訪微信聯繫人界面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章