Почему я вижу только последний элемент массива в табличном представлении в Swift 5? - PullRequest
0 голосов
/ 07 января 2020

У меня есть UI, как указано ниже, и когда я нажимаю кнопку «Сохранить» в пользовательском интерфейсе, я хочу добавить три значения в верхней части представления в табличное представление, в котором есть три разные метки для их представления и пользовательская структура для определить модель. Но моя проблема в том, что я могу добавить только один элемент, но я хочу сохранить ранее добавленные элементы в этом массиве и показать их в tableView.

Вот изображение UI

enter image description here

Вот код:

MainViewController.swift

class MainViewController: UIViewController {

    @IBOutlet weak var minDbLabel: UILabel!
    @IBOutlet weak var averageDbLabel: UILabel!
    @IBOutlet weak var maximumDbLabel: UILabel!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "saveRecord" {
            let recordVC = segue.destination as! RecordTableViewController

            recordVC.record.minimumValue = (minDbLabel.text! as NSString).floatValue
            recordVC.record.averageValue = (averageDbLabel.text! as NSString).floatValue
            recordVC.record.maximumValue = (maximumDbLabel.text! as NSString).floatValue

            recordVC.recordsArray.append(recordVC.record)
        }
    }

    @IBAction func save(_ sender: UIButton){
        self.performSegue(withIdentifier: "saveRecord", sender: nil)
    }

}

RecordTableViewController.swift:

class RecordCell: UITableViewCell {
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var minimumValueLabel: UILabel!
    @IBOutlet weak var averageValueLabel: UILabel!
    @IBOutlet weak var maximumValueLabel: UILabel!
}

class RecordTableViewController: UITableViewController {

    let cellIdentifier: String = "cellID"
    var recordsArray = [Record]()
    var record: Record = Record()

    override var shouldAutorotate: Bool {
        return false
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let swipe = UISwipeGestureRecognizer(target: self, action: #selector(swipeRight(_:)))
        swipe.direction = .right
        self.view.addGestureRecognizer(swipe)

        tableView.insertRows(at: [IndexPath(row: recordsArray.count - 1, section: 0)], with: .automatic)
        tableView.reloadData()
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return recordsArray.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! RecordCell
        cell.minimumValueLabel.text = "\(recordsArray[indexPath.row].minimumValue)"
        cell.averageValueLabel.text = "\(recordsArray[indexPath.row].averageValue)"
        cell.maximumValueLabel.text = "\(recordsArray[indexPath.row].maximumValue)"
        return cell
    }
}

Record.swift

struct Record {
    var minimumValue: Float = .nan
    var averageValue: Float = .nan
    var maximumValue: Float = .nan
}

Спасибо в аванс.

Примечание: я уже искал в Google, чтобы найти ответ, но безрезультатно.

1 Ответ

2 голосов
/ 07 января 2020

Вы должны добавить данные в recordsArray в MainViewController, прежде чем приступить к переходу. См. Код ниже

class MainViewController: UIViewController {

 @IBOutlet weak var minDbLabel: UILabel!
    @IBOutlet weak var averageDbLabel: UILabel!
    @IBOutlet weak var maximumDbLabel: UILabel!
    var recordsArray = [Record]()


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "saveRecord" {
            let recordVC = segue.destination as! RecordTableViewController
            var record = Record()
            record.minimumValue = Float(minDbLabel.text!) ?? 0.0
            record.averageValue = Float(averageDbLabel.text!) ?? 0.0
            record.maximumValue = Float(maximumDbLabel.text!) ?? 0.0
            self.recordsArray.append(record)
            recordVC.recordsArray = self.recordsArray
        }
    }

    @IBAction func save(_ sender: UIButton){
        self.performSegue(withIdentifier: "saveRecord", sender: nil)
    }

}

Просто замените MainViewController на код выше, и он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...