Хотите получить вычисленное значение из всех строк - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть таблица, состоящая из более чем 20 строк, и у каждой строки есть 3 текстовых поля с именем Rate, minutes and total. расчет как скорость / 60 * минут = всего. Я хочу получить все 20 строк в другом текстовом поле Balance, которое является не частью ячейки табличного представления, а контроллером представления. Я хочу вычислить значение в реальном времени и получить добавление общего текстового поля с именем «Рупии». Текстовое поле под ячейкой табличного представления введите описание изображения здесь . Я вижу 3 строки на экране, а 17 других не активны , Я получаю только 3 текстовых поля подряд не для всех. Я написал этот код, но могу рассчитывать на 3 строки, а не на все 20. Пожалуйста, проверьте заранее. Во втором выпуске я использовал уведомление для передачи строки, и оно отправляет мне последнее значение в строке, а не обновленное. Пожалуйста, проверьте изображение

import UIKit

class calculationTVC: UITableViewCell, UITextFieldDelegate{
  var numberOfItems = 0
  var myTV : UITableView!



  @IBOutlet weak var minutes: UITextField!
  @IBOutlet weak var total: UITextField!
  @IBOutlet weak var rate: UITextField!

  @IBAction func rateChanged(_ sender: UITextField) {
    //  print(minutes.text, total.text, rate.text)
    ratesischanged()

  }


  public func ratesischanged(){
    let first = Double(rate.text!)
    let second = Double(minutes.text!)
    let third = Double(0)


    if minutes.text?.count == 0{
      total.text = "\(third)"
    }

    if minutes.text?.count == 0{
      //  print("null")
      total.text = "\(third)"
      //   print("got zero")

    }else{

      let output = Double((first!/60) * second!)
      total.text = "\(output)"

      let rows = myTV.numberOfRows(inSection: 0)
      var add : Double!
      var c = [Int]()

      for i in 0..<rows{

        let path = IndexPath(row: i, section: 0)


        let cell = myTV.cellForRow(at: path) as? calculationTVC



        add = (cell?.total.text as NSString?)?.doubleValue
        //  print(Int(add))
        //print(add)

        if add != nil{

          c += [Int(add)]

          // print(c)

        }

      }


      var sum = 0
      var counter = 0


      // Enter your code below
      while counter < c.count {

        var newValue = c[counter]
        sum += newValue

        counter += 1
        // print(sum, "sum")

      }


      var myString = String(describing: sum)

      NotificationCenter.default.post(name: calculationScreen.notificationName, object: nil, userInfo: ["DataMy": myString ?? ""])
      //print(ar, "new ar")


    }

  }


  func numberOfRows(numberInt : Int,tableView : UITableView){
    numberOfItems = numberInt
    myTV = tableView
  }


}

1 Ответ

0 голосов
/ 28 апреля 2018

вы можете определить протокол на tableViewCell и запустить его, когда UITextField в каждой ячейке изменен, и в вашем viewController орудии делегата:

protocol TableViewCellDelegate: class {
    func textViewValueChanged(minutes: String, rate: String, total: String)
}

class calculationTVC: UITableViewCell { // delete UITextFieldDelegate
    weak var delegate: TableViewCellDelegate?
    // ... the rest of your code

    @IBAction func textFieldEditingChanged(_ sender: UIButton) { //action of ***Editing Changed*** and connected to all *UITextField*
        //calculate total
        delegate?.textViewValueChanged(minutes: self.minutes, rate: self.rate, total: self.total)
    }
}

class viewController: UIViewController, UITableView, UITableViewDelegate, UITableViewdataSource, TableViewCellDelegate { //and what you want to implement
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: IndexPath) as? calculationTVC
        cell.delegate = self
        // ... the rest of your code
        return cell
    }

    func textViewValueChanged(minutes: String, rate: String, total: String) {
        var total = 0
        for i in 1...20 {
        let cell = tableView.cellForRow(at: i) as? calculationTVC
         total += cell.rate/60 * cell.minutes
        }
        //set your totalLabel
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...