Добавление элементов в другое представление таблицы контроллера при нажатии кнопки - PullRequest
0 голосов
/ 29 июня 2019

У меня есть контроллер представления с именем ListViewController и другой, называемый AddFoodViewController. В ListViewController пользователи могут добавлять свои собственные ингредиенты в список покупок, который представлен в виде таблицы. Когда они переходят в AddFoodViewController, пользователи должны иметь возможность нажать кнопку с надписью «добавить в список», которая добавит массив ингредиентов (которые уже представлены в виде таблицы) в список покупок. Я новичок в этом, поэтому мне было интересно, если кто-нибудь может помочь? Я успешно смог заставить ListViewController работать, однако я не уверен, как добавить массив ингредиентов из AddFoodViewController в предыдущий ListViewController.

class AddFoodViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{


@IBOutlet weak var FoodTableView: UITableView!
@IBOutlet weak var sendFoodBtn: UIButton!

//array of food
let array = ["1 Salad", "3oz Chicken", "2 Tomatoes", "2 Cucumbers"]
let category = ""

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


//display array in table view
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return(array.count)
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let foodCell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "foodCell")
        foodCell.textLabel?.text = array[indexPath.row]
        foodCell.backgroundColor = .clear
        foodCell.textLabel?.textColor = .darkGray
        foodCell.textLabel?.font = UIFont(name: (foodCell.textLabel?.font.fontName)!, size:17)
        return foodCell

    }


//button that is supposed to add all ingredients to the ListViewController
 @IBAction func addOnClick(_ sender: Any) {


}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == "toList"){
       let vc = (segue.destination as! ListViewController)
       vc.category = array
           }
    }
}

1 Ответ

0 голосов
/ 29 июня 2019

Передача данных в предыдущий контроллер представления может быть реализована с помощью шаблона делегирования, сначала объявите протокол в вашем AddFoodViewController и определите свойство делегата в контроллере представления.

// AddFoodViewController.swift
protocol AddFoodViewControllerDelegate {
    func addIngredient(array: [String])
}

class AddFoodViewController: UIViewController {
  ...
  var delegate: AddFoodViewControllerDelegate?

  // MARK: add function
  func actionAdd() {
    delegate?addIngredient(array)
  }
  ...
}

Возвращаясь к вашему ListViewController, найдите контроллер представления назначения segue, которым является ваш AddFoodViewController (не забудьте назначить его имя класса в раскадровке), и назначьте делегата для себя.

// ListViewController.swift
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    ...
    let vc = segue.destination as? AddFoodViewController
    vc?.delegate = self
    ...
}

// in the same file, implement delegate method here
extension ListViewController: AddFoodViewControllerDelegate {
    func addIngredient(array: [String]) {
        items += array
        // do table reload or something
    }
}
...