テーブルビューの外にあるwhereボタンを使用してテーブルビューセル間でデータを移行するにはどうすればよいですか?

EmreDeğirmenci

2つのカスタムテーブルビューがあります。DestinationTableViewの最初と2番目のセルデータをMyCartTableViewの最初のセルに渡す必要があります。tableViewの外部でこの2つのテーブルビューセル間を移行するにはどうすればよいですか。

私はそうしました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
}
}
チャオ

渡すデータのインデックスパスを取得する必要があります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
    }
  }
}

ところで、コーディングを改善するために、コードにOOPの概念を実装できます。detailFoodNameとdetailFoodPriceは1つのオブジェクトに含まれている必要があります。その上、var foodNameArray: String命名は混乱を招く可能性があります。名前を変更してくださいvar foodName: String

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ