Не передаются данные из PopUpVC в container table view controller

swift

#1

Привет всем! Реализовываю небольшой калькулятор и возникла проблема… У меня на главном экране вот такое окошко :


При нажатии на кнопку появляется всплывающее окошко, куда вводятся параметры
Проблема в том, что при заполнении данных в всплывающем окне и нажатии на кнопку “Добавить”, они не заполняются в центральном в Container Table View.

Класс Cabel

import Foundation

class Cable {
   let NameOfCable : String
   let LengthOfCable : String
   let RCable : String
   let XCable : String

   init(NameOfCable: String, LengthOfCable : String, RCable : String, XCable : String) {
    
   self.NameOfCable = NameOfCable
   self.LengthOfCable = LengthOfCable
   self.RCable = RCable
   self.XCable = XCable
    
   }
}

Класс Container Table View

import UIKit


class CableTableViewController: UITableViewController, AddCableViewControllerDelegate {

var cables = [Cable]()



override func viewDidLoad() {
    super.viewDidLoad()
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return cables.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CableCellIdentifier", for: indexPath)
    let cable = cables[indexPath.row]
    cell.textLabel?.text = cable.NameOfCable
    return cell
    }


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
    let navigationController = segue.destination as! UINavigationController
    let addCableViewController = navigationController.topViewController as! AddCableViewController
    addCableViewController.delegateCable = self
    
    }

func addCableViewController(_ addCableViewController: AddCableViewController, didAddCable cable: Cable) {
    cables.append(cable)
   tableView.reloadData()
   }

}

Класс Pop up view

import UIKit

protocol AddCableViewControllerDelegate {

func addCableViewController(_ addCableViewController: AddCableViewController, didAddCable cable: Cable)
}

class AddCableViewController: UIViewController {


    @IBOutlet var NameOfCableTextField : UITextField!
    @IBOutlet var LengthOfCableTextField : UITextField!
    @IBOutlet var RCableTextField : UITextField!
    @IBOutlet var XCableTextField : UITextField!

    var delegateCable: AddCableViewControllerDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func AddTappedCabel(_sender: UIBarButtonItem) {
    
    let NameOfCable = NameOfCableTextField.text ?? ""
    let LengthOfCable = LengthOfCableTextField.text ?? ""
    let RCable = RCableTextField.text ?? ""
    let XCable = XCableTextField.text ?? ""
    
    let newCables = Cable(NameOfCable: NameOfCable, LengthOfCable: LengthOfCable, RCable: RCable, XCable: XCable)
    delegateCable?.addCableViewController(self, didAddCable: newCables)
    dismiss(animated: true, completion: nil)
}
@IBAction func CancelTapped(_sender: UIBarButtonItem){
    dismiss(animated: true, completion: nil)
}
}

#2

А где у вас на главном окне tableView которое вы перегружаете? И его @IBOutlet в классе?


#3


Тут получается на главном экране у меня Container в который включен отдельно Table View Controller.

@IBOutlet включен в класс всплывающего окна, где вводятся сами данные (AddCableViewController)

И уже при нажатии кнопки “Добавить” в всплывающем окне, данные должны добавляться в Table на главном экране


#4

Подписать этот класс на протоколы UITableViewDelegate и UITableViewDataSourse и в сам класс добавить Outlet tableView пробовали?


#5

Сам протокол Delegate прописан в Pop Up, а класс CableTableViewController подписан на этот протокол, но на DataSource не подписывал, он же по идее реализуется в table view controller, с помощью prepare ?


#6

Мне кажется что-то тут вы с протоколом AddCableViewControllerDelegate перемудрили, нужен ли он вообще.
Точку останова в prepare ставили? Вы попадаете вообще в prepare когда жмете Добавить непонятно, у вас же это не сегвей случается при закрытии окна.


#7

В prepare не попадают, в CableTableViewController вообще не получается зайти при нажатии кнопки «Добавить»… вот я и думал на делегирование это и на prepare, но другого способа пока не знаю, как передать


#8

Можете дать ссылку чтобы скачать проект? Гляну завтра вечером