将数据从 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 的特定行传递到另一个视图控制器