将数据从 tableview 传递到另一个 tableview

Posted

技术标签:

【中文标题】将数据从 tableview 传递到另一个 tableview【英文标题】:pass data from tableview to another tableview 【发布时间】:2020-06-11 07:54:14 【问题描述】:

我是 swift 的初学者,我真的很想解决这个问题。我正在尝试将数据从 tableview 传递到另一个,但是当我运行代码时,它只显示一个空白的 tableview。这是我在源 tableviewcontroller 中的代码:

import UIKit

class C1TableViewController: UITableViewController 

var categorisePagePOneName = ["CLOTHING", "SHOES", "ACCESSORIES", "THEME"]
var selectedIndex = Int()



override func viewDidLoad() 
    super.viewDidLoad()

override func numberOfSections(in tableView: UITableView) -> Int 

    return 1


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

    return categorisePagePOneName.count



override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    let cellIdt = "Conecell"
  let cell = tableView.dequeueReusableCell(withIdentifier: cellIdt, for: indexPath) as! C1TableViewCell

    cell.textLabel?.text = categorisePagePOneName[indexPath.row]


    // Configure the cell...

    return cell



func laodForNextPage(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath, segue: UIStoryboardSegue, sender: AnyObject?) 
    performSegue(withIdentifier: "connect2", sender: self)
    self.selectedIndex = indexPath.row
    if segue.identifier == "connect2" 
        let vc = segue.destination as! C2TableViewController
        vc.firstRow = categorisePagePOneName[self.selectedIndex]

    

然后这是我在另一个 tableViewController 中的代码:

import UIKit

class C2TableViewController: UITableViewController 

var firstRow: String!


var secondArray: [String] = []


var clothingCat = ["ALL CLOTHING", "THEME", "JACKET", "T-SHIRT", "SHIRT", "SWEATSHIRT", "HOODIES", "PANTS", "JEANS", "SHORTS", "KNITWEAR", "VESTS"]

var shoesCat = ["ALL SHOES", "THEME", "BOOTS", "SANDALS", "SNEAKERS"]

var asscessoriesCat = ["ALL ASSCESSORIES", "THEME", "HAT","BAGS", "JEWELLERY", "EYEWEAR", "WATCHES", "WALLETS", "SOCKS", "UNDERWEAR"]

var themeCat = ["VINTAGE", "KOREA","JAPAN", "SPORTY"]


override func viewDidLoad() 
    super.viewDidLoad()
    

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int 
    // #warning Incomplete implementation, return the number of sections
    return 1


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    // #warning Incomplete implementation, return the number of rows
    return secondArray.count



override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 


    let cell = tableView.dequeueReusableCell(withIdentifier: "C2", for: indexPath) as! C2TableViewCell

    // Configure the cell...

    switch firstRow 
     case "CLOTHING":
         secondArray = clothingCat

     case "SHOES":
         secondArray = shoesCat

     case "ASSCESSORIES":
     secondArray = asscessoriesCat

     case "THEME":
         secondArray = themeCat

     default:
         break
     
    cell.textLabel?.text = secondArray[indexPath.row]


    return cell

我不确定在这种情况下我是否正确使用了 switch

【问题讨论】:

您必须实现prepare(for segue 并将代码放在performSegue 行之后。并将索引路径传递为sender 我尝试像这样实现 prepare(for: segue, sender: self.selectedIndex),但它不起作用。 T.T 请清理您的代码,确保它是有效的 Swift(它不是),删除任何无助于澄清您的问题的 cmets、空格和代码,例如 #warning cmets,空 func s,自动生成的 cmets 等 【参考方案1】:

替换(自定义方法laodForNextPage反正也没用)

func laodForNextPage(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath, segue: UIStoryboardSegue, sender: AnyObject?) 
    performSegue(withIdentifier: "connect2", sender: self)
    self.selectedIndex = indexPath.row
    if segue.identifier == "connect2" 
        let vc = segue.destination as! C2TableViewController
        vc.firstRow = categorisePagePOneName[self.selectedIndex]

    

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    performSegue(withIdentifier: "connect2", sender: indexPath)

并实施

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "connect2" 
        let indexPath = sender as! IndexPath
        let vc = segue.destination as! C2TableViewController
        vc.firstRow = categorisePagePOneName[indexPath.row]
    

你可以删除selectedIndex

【讨论】:

谢谢!但是在 let indexPath = sender as 行中仍然有一个信号 SIGABRT! IndexPath 我能用它做什么? 错误显示 indexPath 使用了未声明的类型'Foundation' 如果您在performSegue 中将indexPath 作为sender 传递,它不会崩溃【参考方案2】:

发送者为indexPath时需要添加此函数

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 


【讨论】:

以上是关于将数据从 tableview 传递到另一个 tableview的主要内容,如果未能解决你的问题,请参考以下文章

Objective C - 将 JSON 数据从 Tableview 传递到另一个 View Controller

在将数据从 tableView 传递到另一个 viewController Swift 时需要帮助。查看其他示例后继续出错

如何使用 SWrevaelviewController swift 3 将数据从 tableview 的特定行传递到另一个视图控制器

将数据从 tableviewcell 传递到另一个 viewcontroller

将数据从一个设计选项卡传递到另一个选项卡

将标签数据从表视图传递到另一个视图控制器