Как сделать переход данных между ячейками табличного представления с помощью кнопки где из табличного представления? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть два пользовательских вида таблицы.Мне нужно передать данные первой и второй ячейки DestinationTableView в первую ячейку MyCartTableView.Как я могу сделать переход между этими двумя ячейками табличного представления за пределами tableView.

Я сделал tableView.indexPathForSelectedRow, но на этот раз мне нужно сделать с UIButton за пределами tableView.

Ниже вызвано с ячейкой tableView.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "cellForFoodSegue" {
        if let destinationViewController = segue.destination as? DetailViewController
        {
            let indexPath = self.mainTableView.indexPathForSelectedRow!

            var foodNameArray: String
            var foodPriceArray: Double

            foodNameArray = foodNames[indexPath.row]
            foodPriceArray = foodPrices[indexPath.row].purchaseAmount

            destinationViewController.detailFoodName = foodNameArray
            destinationViewController.detailFoodPrice = foodPriceArray

        }

    }
}

Я пробовал код ниже, но мне не удалось передать данные с помощью кнопки.

@IBAction func addBasket(_ sender: Any) {

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == "addToCartSegue") {


        if let addToCartVC = segue.destination as? MyCartViewController {

            let selectedCell = sender as! UITableViewCell
            let indexPath = self.detailTableView.indexPath(for: selectedCell)

           var foodNameArray: String
           var foodPriceArray: Double

           foodNameArray = foodNames[indexPath.row]
           foodPriceArray = prices[indexPath.row].purchaseAmount

           addToCartVC.fromDetailFoodName = foodNameArray
            addToCartVC.fromDetailFoodPrice = prices[(indexPath?.row)!].purchaseAmount

        }
    }
}

Ниже моих кодов MyViewController.Какие мои добавленные объекты при нажатии на кнопку addBasket

class MyCartViewController: UIViewController, UITableViewDataSource,  UITableViewDelegate {

var fromDetailFoodName: [String?] = []
var fromDetailFoodPrice =  Double()

var nameLabel = MyCartTableViewCell()

@IBOutlet weak var myCartTableView: UITableView!
@IBOutlet weak var totalPriceLabel: UILabel!

let foodNames = [
    "Hamburger big mac",
    "Cemal",
    "Emre",
    "Memo"
]

//TODO-: Delete my cart
@IBAction func deleteMyCart(_ sender: Any) {
}

//TODO: - Approve my  cart
@IBAction func approveCart(_ sender: Any) {
}


override func viewDidLoad() {
    super.viewDidLoad()


}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return section == 0 ? 1 : foodNames.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCartCell", for: indexPath) as! MyCartTableViewCell
    cell.myCartFoodNameLabel?.text = fromDetailFoodName.description
    cell.myCartFoodPriceLabel?.text = "\(fromDetailFoodPrice)₺"
    return cell
}
}

1 Ответ

0 голосов
/ 04 марта 2019

Вы должны получить индексный путь данных, которые вы хотите передать в func addBasket(_ sender: Any).Например, вы можете сохранить индексный путь как свойство, на которое ссылается класс.

class StartViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

  var selectedIndexPath: IndexPath?

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedIndexPath = indexPath
  }

  @IBAction func addBasket(_ sender: Any) {
    if let indexPath = selectedIndexPath {
      let destinationVC = MyCartViewController()
      destinationVC.detailFoodName = foodNames[indexPath.row]
      destinationVC.detailFoodPrice = foodPrices[indexPath.row].purchaseAmount
    }
  }
}

В MyCartViewController, который является целевым VC.

class MyCartViewController: UIViewController, UITableViewDataSource,  UITableViewDelegate {

  var fromDetailFoodNames: [String?] = []
  var fromDetailFoodPrices:  [Double?] = []

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.section == 1 && indexPath.last! <= fromDetailFoodPrices.indices.last! {
      let cell = myCartTableView.dequeueReusableCell(withIdentifier: "myCartCell", for: indexPath) as! MyCartTableViewCell
      let name = fromDetailFoodNames[indexPath.row]?.description ?? ""
      let price = fromDetailFoodPrices[indexPath.row]
      cell.myCartFoodNameLabel?.text = name
      cell.myCartFoodPriceLabel?.text = "\(price)₺"
      return cell
    }
  }
}

Кстати, для лучшего кодирования выможет реализовать концепцию ООП в вашем коде.detailFoodName и detailFoodPrice должны быть в ОДНОМ объекте.Кроме того, var foodNameArray: String наименование может сбить с толку.Переименуйте его, как var foodName: String будет лучше.

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