如何使用 swift 2.0 中的 prepareForSegue 将数据从 PFTableViewCell 传递到下一个 ViewController?
How do I pass the data from PFTableViewCell to the next ViewController using prepareForSegue in swift 2.0?
我正在尝试将数据从 PFTableViewCell 传递到我的下一个视图控制器(详细信息),但我仍然无法看到数据。我认为我为 Swift 2.0/Xcode 7 编写了正确的代码。我已经坚持了大约 2 周,而且我根本不擅长编码。是否有任何其他代码可以将数据传递给其他 viewcontroller?
在我的 FirstViewController 中,我编写了以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Detail" {
if let destination = segue.destinationViewController as? DetailsViewController
, path = tableView?.indexPathForSelectedRow
, cell = tableView?.cellForRowAtIndexPath( path ) as? Post
{
destination.name = cell.name.text ?? "nil"
destination.message = cell.message.text ?? "nil"
}
在我的 DetailsViewController 中,我写了这个:
var name: String?
var message: String?
@IBOutlet weak var userName: UILabel?
@IBOutlet weak var userMessage: UILabel?
override func viewDidLoad()
{
super.viewDidLoad()
userName?.text = name ?? "nil"
userMessage?.text = message ?? "nil"
}
好的,如果你使用的是 PFQueryTableViewController,试试这个:
1) 创建一个从 PFQueryTableViewController(不是从单元格,从视图控制器)到要将数据传输到的视图控制器的手动 segue。在界面生成器的检查器面板中,将其命名为 "yourManualSegue"
2) 在 class 的顶部(PFQueryTableViewController),创建 2 个变量:
var nameToPass = String()
var messageToPass = String()
3) 调用 didSelectRowAtIndexPath 方法,如下所示:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let object = objectAtIndexPath(indexPath)
self.nameToPass = object!.objectForKey("keyThatholdsNameHere") as! String
self.messageToPass = object!.objectForKey("keyForMessageHere") as! String
self.performSegueWithIdentifier("yourManualSegue", sender: self)
}
4) 现在,在您的 prepareForSegue 中:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Detail" {
let destination = segue.destinationViewController as? DetailsViewController
destination.name = self.nameToPass
destination.message = self.messageToPass
}
我正在尝试将数据从 PFTableViewCell 传递到我的下一个视图控制器(详细信息),但我仍然无法看到数据。我认为我为 Swift 2.0/Xcode 7 编写了正确的代码。我已经坚持了大约 2 周,而且我根本不擅长编码。是否有任何其他代码可以将数据传递给其他 viewcontroller?
在我的 FirstViewController 中,我编写了以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Detail" {
if let destination = segue.destinationViewController as? DetailsViewController
, path = tableView?.indexPathForSelectedRow
, cell = tableView?.cellForRowAtIndexPath( path ) as? Post
{
destination.name = cell.name.text ?? "nil"
destination.message = cell.message.text ?? "nil"
}
在我的 DetailsViewController 中,我写了这个:
var name: String?
var message: String?
@IBOutlet weak var userName: UILabel?
@IBOutlet weak var userMessage: UILabel?
override func viewDidLoad()
{
super.viewDidLoad()
userName?.text = name ?? "nil"
userMessage?.text = message ?? "nil"
}
好的,如果你使用的是 PFQueryTableViewController,试试这个:
1) 创建一个从 PFQueryTableViewController(不是从单元格,从视图控制器)到要将数据传输到的视图控制器的手动 segue。在界面生成器的检查器面板中,将其命名为 "yourManualSegue"
2) 在 class 的顶部(PFQueryTableViewController),创建 2 个变量:
var nameToPass = String()
var messageToPass = String()
3) 调用 didSelectRowAtIndexPath 方法,如下所示:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let object = objectAtIndexPath(indexPath)
self.nameToPass = object!.objectForKey("keyThatholdsNameHere") as! String
self.messageToPass = object!.objectForKey("keyForMessageHere") as! String
self.performSegueWithIdentifier("yourManualSegue", sender: self)
}
4) 现在,在您的 prepareForSegue 中:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Detail" {
let destination = segue.destinationViewController as? DetailsViewController
destination.name = self.nameToPass
destination.message = self.messageToPass
}