簡體   English   中英

UISegmentedControl動作內的UIButton

[英]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

用代碼寫下IBAction(就像我上面寫的calculate動作一樣)。 轉到情節提要,然后打開輔助編輯器( Alt Cmd Enter )。 在界面構建器中選擇一個UI元素(如文本字段)。 打開“連接”檢查器( Alt Cmd 6 ),然后從已發送事件(例如,“ Edited Changed”)旁邊的圓圈拖動到IBAction代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM