gpt4 book ai didi

swift - 从另一个 TableView 添加行 - Swift

转载 作者:行者123 更新时间:2023-11-30 11:35:15 24 4
gpt4 key购买 nike

我正在尝试这样做,以便当我单击 listtableviewcontroller 上的数组中的一项时,它会将这一选择传递给 dataaddedtableviewcontroller 并附加该选择,以便我可以继续添加到列表中。 Storyboard

我尝试使用协议(protocol)和委托(delegate)传递数据,但是传递的只是整个列表本身(我认为这主要是因为我使用了按钮而不是单击单元格,因为我不知道如何否则)。我还尝试使用 segues 传递数据,但是一旦单击单元格,我似乎无法附加数据。

任何帮助将不胜感激。非常感谢!

第一个 View Controller :

protocol ListTableViewControllerDelegate {
func addNew(todo: String)
}

class ListTableViewController: UITableViewController {

var delegate: ListTableViewControllerDelegate?

var list = ["chicken", "phone", "water"]

@IBAction func saveToList(_ sender: Any) {
delegate?.addNew(todo: "\(list)")
navigationController?.popToRootViewController(animated: true)
}



override func viewDidLoad() {
super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

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

}

第二个 View Controller :

class DataAddedTableViewController: UITableViewController, ListTableViewControllerDelegate {

var dataAdded = [String]()

func addNew(todo: String) {
dataAdded.append(todo)
tableView.reloadData()
}

override func viewDidLoad() {
super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = dataAdded[indexPath.row]
return cell
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destVC = segue.destination as? ListTableViewController {
destVC.delegate = self as ListTableViewControllerDelegate

}
}

}

最佳答案

您需要找出用户点击的列表项的索引。目前您刚刚传递了整个列表。该行需要调整:

之前:

@IBAction func saveToList(_ sender: Any) {
delegate?.addNew(todo: list)
navigationController?.popToRootViewController(animated: true)
}

之后:

@IBAction func saveToList(_ sender: Any) {
let index = CODE_NEEDE_HERE //figure out how to find out the index of the list
delegate?.addNew(todo: list[index])
navigationController?.popToRootViewController(animated: true)
}

我猜你有充分的理由不使用委托(delegate)方法 tableView(_:didSelectRowAt:)

使用tableView(_:didSelectRowAt:)解决方案可能是这样的:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let item = list[indexPath.row]
delegate?.addNew(todo: item)
}

关于swift - 从另一个 TableView 添加行 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49835809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com