У меня есть контроллер основного представления 1, который содержит 2 дочерних представления контейнера, и еще один отдельный контроллер представления 2. Как передать данные из контроллера представления 2 в один из дочерних контроллеров представления контейнера, как показано на рисунке ниже?Коды для контроллера AddVC и контроллера TableVC указаны ниже
В контроллере 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
}
}