[英]UIButton inside UISegmentedControl action
我正在繼續我的計算程序,以提高我在Swift代碼中的技能。 現在,我遇到一個問題:我希望UISegmentedControl選擇我的操作的運算符(+,-ecc ..),並且當選擇一個操作符時,UIButton函數會根據UISegmentedControl的決定來計算值。
這是代碼,但不起作用。
謝謝,Matteo
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var firstNumber: UITextField!
@IBOutlet weak var secondNumber: UITextField!
@IBOutlet weak var resultButton: UIButton!
@IBOutlet weak var resultNumber: UILabel!
@IBOutlet weak var operatorSelector: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func operatorSelectorChanged(_ sender: UISegmentedControl) {
switch operatorSelector.selectedSegmentIndex {
case 0:
@IBAction func resultFunction(_ sender: AnyObject) {
if let firstNumberConv :Int = Int(firstNumber.text!), let secondNumberConv :Int = Int(secondNumber.text!) {
let result = firstNumberConv + secondNumberConv
resultNumber.text = "\(result)"
} else { resultNumber.text = "Inserire solo valori numerici"}
}
case 1:
@IBAction func resultFunction(_ sender: AnyObject) {
if let firstNumberConv :Int = Int(firstNumber.text!), let secondNumberConv :Int = Int(secondNumber.text!) {
let result = firstNumberConv - secondNumberConv
resultNumber.text = "\(result)"
} else { resultNumber.text = "Inserire solo valori numerici"}
}
default:
break;
}
}
}
嘗試在開關盒內使用@IBAction func ...
刪除行。
我認為您的@IBAction func operatorSelectorChanged
應該看起來像這樣:
@IBAction func operatorSelectorChanged(_ sender: UISegmentedControl) {
switch operatorSelector.selectedSegmentIndex {
case 0:
if let firstNumberConv = Int(firstNumber.text!), let secondNumberConv = Int(secondNumber.text!) {
let result = firstNumberConv + secondNumberConv
resultNumber.text = "\(result)"
} else { resultNumber.text = "Inserire solo valori numerici"}
case 1:
if let firstNumberConv = Int(firstNumber.text!), let secondNumberConv = Int(secondNumber.text!) {
let result = firstNumberConv - secondNumberConv
resultNumber.text = "\(result)"
} else { resultNumber.text = "Inserire solo valori numerici"}
default:
break;
}
}
您的問題的可能解決方案是定義一個IBAction來計算兩個數字相加/相減的結果
@IBAction func calculate(_ sender: AnyObject) {
if let a = Int(firstNumber.text!), let b = IntsecondNumber.text!) {
switch operatorSelector.selectedSegmentIndex {
case 0:
resultNumber.text = "\(a+b)"
case 1:
resultNumber.text = "\(a-b)"
default:
print("❗️unknown operator selected")
}
}
}
然后,您可以將此操作綁定到從用戶界面發送的事件:例如,文本字段(firstNumber和secondNumber)的Editing Changed
事件和分段控件的Value Changed
(operatorSelector)
我創建了一個示例項目來說明這一點: https : //github.com/dev1an/calculator
用代碼寫下IBAction(就像我上面寫的calculate動作一樣)。 轉到情節提要,然后打開輔助編輯器( Alt Cmd Enter )。 在界面構建器中選擇一個UI元素(如文本字段)。 打開“連接”檢查器( Alt Cmd 6 ),然后從已發送事件(例如,“ Edited Changed”)旁邊的圓圈拖動到IBAction代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.