Как передать данные от одного Контроллера Представления Контроллеру Контейнера Представления в XCode 10 - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть контроллер основного представления 1, который содержит 2 дочерних представления контейнера, и еще один отдельный контроллер представления 2. Как передать данные из контроллера представления 2 в один из дочерних контроллеров представления контейнера, как показано на рисунке ниже?Коды для контроллера AddVC и контроллера TableVC указаны ниже

SegueHowTo

В контроллере AddVC:

protocol AddTask
{
    func addTask(Item: String, Price: Float)
}
class AddVC: UIViewController
{

@IBOutlet var ItemsName: UITextField!

@IBOutlet var ItemsPrice: UITextField!

var delegate: AddTask?

override func viewDidLoad()
{
    super.viewDidLoad()

}

@IBAction func AddItem(_ sender: Any)
{
    //To display text fields side by side in table view
    if let Item = ItemsName.text, let priceAsString = ItemsPrice.text, let Price = Float(priceAsString)
    {
        delegate?.addTask(Item: Item, Price: Price)
        navigationController?.popViewController(animated: true)

    }
}`

В контроллере TableVC:

    class TableVC: UIViewController, UITableViewDelegate, UITableViewDataSource, AddTask, ChangeButton
{

@IBOutlet var MyTableView: UITableView!

@IBOutlet var BlankLabel: UILabel!

@IBOutlet var TotalLabel: UILabel!

@IBOutlet var Total: UILabel!

//empty array var
var tasks: [Task] = []

override func viewDidLoad()
{
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

//table view func
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    //Add Sum tableviewcell

    var sum: Float = 0.00

    for item in tasks
    {
        sum += Float(item.Price)
    }

    Total.text = "\(sum)"

    //require to return tablebiew row.
    return tasks.count
    //return currentTableview.count

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    //display items
    let cell = tableView.dequeueReusableCell(withIdentifier:"taskCell", for: indexPath) as! TaskCell

    cell.ItemView.text = tasks[indexPath.row].Item

    //display number as String
    cell.PriceView.text = "\(tasks[indexPath.row].Price)"

    //Checkbox
    if tasks[indexPath.row].Checked
    {
        cell.CheckboxOutlet.setBackgroundImage( imageLiteral(resourceName: "checkbox") , for: UIControl.State.normal)
    }

    else
    {
        cell.CheckboxOutlet.setBackgroundImage( imageLiteral(resourceName: "checkOutline"), for: UIControl.State.normal)
    }

    cell.delegate = self
    cell.indexP = indexPath.row
    cell.tasks = tasks

    return cell


}

//Prepare for segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "Add"
    {
        let vc = segue.destination as! AddVC
        vc.delegate = self
    }

    else if segue.identifier == " "
    {


    }

}

//AddVC controller func
func addTask(Item: String, Price: Float)
{
    //declare multiple var
    let item = Task(Item: Item, Price: Price)
    tasks.append(item)
    MyTableView.reloadData()
}

func changeButton(checked: Bool, index: Int)
{
    tasks[index].Checked = checked
    MyTableView.reloadData()
}



}

class Task
{
    var Item: String = ""
    var Price: Float = 0.00
    var Checked = false

    convenience init(Item: String, Price: Float)
    {
       self.init()
       self.Item = Item
       self.Price = Price

    }

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