我有一个UITableViewController
,它提供一个字符串数组作为数据源:
import UIKit
class ItemsViewController: UITableViewController {
let items = [
"Bob",
"Joe",
]
@IBAction
func unwindToSegue(segue: UIStoryboardSegue) {
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Item", forIndexPath: indexPath) as UITableViewCell
cell.textLabel.text = items[indexPath.row]
return cell
}
}
现在,我添加了另一个带有
UIViewController
的场景,当用户通过show segue单击UITableCell
时,该场景被激活。我现在想将分配给先前
UITableCell
的字符串并插入ItemViewController
:import UIKit
class ItemViewController: UIViewController {
@IBOutlet
weak var nameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//var name = segue.someMethodHowIGetTheDataAssignedToTableCell
//nameLabel.text = name
}
}
如何将分配给单个TableCell的模型(在这种情况下为字符串)传递给新的
ItemViewController
? 最佳答案
像这样。只需将从ItemViewController的return push segue添加回ItemsViewController。命名它们在将来不太相似:-)
import UIKit
class ItemsViewController: UITableViewController {
let items = [
"Bob",
"Joe",
]
@IBAction
func unwindToSegue(segue: UIStoryboardSegue) {
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Item", forIndexPath: indexPath) as UITableViewCell
cell.textLabel.text = items[indexPath.row]
return cell
}
//Passing details to detail VC
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let indexPath = self.tableView.indexPathForSelectedRow()
let theDestination = (segue.destinationViewController as ItemViewController)
theDestination.itemName = items[indexPath!.row]
}
}
import UIKit
class ItemViewController: UIViewController {
@IBOutlet weak var nameLabel: UILabel!
var itemName = ""
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = itemName
}
}