前言
爲了打好基礎,業餘時刻寫了一個,簡易的計算器,純代碼界面,個人不喜歡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不能實時顯示界面佈局。
下一篇:訪微信聯繫人界面。