【问题标题】:how can I add a addition feature into my Xcode project如何在我的 Xcode 项目中添加附加功能
【发布时间】:2021-09-20 00:02:43
【问题描述】:

我的 firstViewContoller 中有一个文本字段,用户可以在其中输入一些数字。然后在我的 secondViewController 我有一个标签,在该标签中我希望显示用户输入的数字。我已经做到了,但我不知道如何获取用户每次在文本字段中输入的值并将其全部加起来并在标签中显示结果。例如,用户输入 5,所以现在标签显示 5,然后用户输入 20,现在我希望标签将其添加并显示 25,并继续添加用户输入的内容。

// ViewController.swift

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    
  @IBOutlet weak var amountSpent: UITextField!
    override func viewDidLoad() {
      super.viewDidLoad()
      amountSpent.delegate = self
      amountSpent.keyboardType = .numberPad    }
     private func amountSpent(_ amountSpent: UITextField, 

shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
         let invalidCharacters = CharacterSet(charactersIn: "0123456789").inverted
        
        return string.rangeOfCharacter(from: invalidCharacters) == nil    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let resultViewController = segue.destination as! ResultViewController
        resultViewController.recievedInt = amountSpent.text!
    
}
    @IBAction func buttonPressed(_ sender: Any) {
        self.performSegue(withIdentifier: "goToResult", sender: nil)  }    }

// ResultViewController.swift

import UIKit

class ResultViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var totalAmount: UILabel!
    var recievedInt = ""
    override func viewDidLoad() {
        super.viewDidLoad()
        totalAmount.text = recievedInt
        
    }
    
}

【问题讨论】:

    标签: ios swift addition


    【解决方案1】:

    将新值和现有值从字符串转换为 Int 并将它们加在一起,然后再将标签设置为新的总数

    class ResultViewController: UIViewController, UITextFieldDelegate {
        @IBOutlet weak var totalAmount: UILabel!
        var recievedInt = ""
    
        override func viewDidLoad() {
            super.viewDidLoad()
            if let newValue = Int(recievedInt), let total = Int(totalAmount.text!) {
                let newTotal = newValue + total
                totalAmount.text = "\(newTotal)"
            }
        }
    

    另一种方法是

    override func viewDidLoad() {
        super.viewDidLoad()
        let newValue = Int(recievedInt) ?? 0 
        let total = Int(totalAmount.text!) ?? 0
        let newTotal = newValue + total
        totalAmount.text = "\(newTotal)"
    }
    

    【讨论】:

    • 我尝试了您的答案,但标签中没有显示任何内容。我不知道我是不是做错了什么。我将您的代码粘贴到我的 ResultViewController 中。我应该做点别的吗?
    • @Mariam 我添加了一个替代解决方案,以防变量/abels 的初始值出现问题
    【解决方案2】:
    1. 创建一个字符串变量来存储总值

       var totalValue = "0"
      
    2. 将以下方法添加到您的项目中。这将添加您输入的所有值并将总值作为字符串返回

       private func getTotalCount(string: String) -> String {
      
         let strTotal = "\(totalCount) + \(string)"
         let arithmeticExpression = NSExpression(format: strTotal)
         let additionResult = arithmeticExpression.expressionValue(with: nil, context: nil) as! Int
      
         return String(additionResult)
       }
      
    3. 在文本字段中输入计数后,您将单击完成/返回按钮,将触发委托方法。在委托方法中调用 getTotalCount() 方法如下:

      func textFieldShouldReturn(_ textField: UITextField) -> Bool {
      
         totalCount = self.getTotalCount(string: textField.text ?? "0")
      
         textField.resignFirstResponder()
         return true
      }
      

    因此添加新计数将在 UITextField 委托方法内自动处理。您只需将 totalValue 传递给下一个视图控制器,如下所示:

        let resultViewController = segue.destination as! ResultViewController
        resultViewController.recievedInt = totalCount
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-25
      • 2014-09-22
      • 1970-01-01
      • 2012-11-02
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多