在 ViewController 之间使用 instantiateViewControllerWithIdentifier 传递数据
Passing data using instantiateViewControllerWithIdentifier between ViewControllers
在过去的 2 天里,我一直在研究这个问题并尝试各种选择,但被难住了。我有一个页面,用户可以在其中滑动单元格并看到以下选项
当用户点击“举报用户”时,他们应该会被带到一个页面,其中包含一个允许他们提交对其他用户的投诉的表单。第一个 VC 称为消息,它应该传递报告用户和被报告用户的用户名。现在只有报告用户被传递,因为它在 NSDictionary 中。我尝试过的最新方法是导致应用程序崩溃并显示 'libc++abi.dylib: terminating with uncaught exception of type NSException' 以下是代码示例:
let shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "Report User" , handler: { (action:UITableViewRowAction!, indexPath:IndexPath!) -> Void in
let shareMenu = UIAlertController(title: nil, message: "Report User", preferredStyle: .actionSheet)
let editBtn = UIAlertAction(title: "Harrassment, Inappropriate Content, Abuse", style: .default) { (action:UIAlertAction) in
self.reportPost(indexPath)
}
//let harrassAction = UIAlertAction(title: "Harrassment", style: UIAlertActionStyle.default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)
shareMenu.addAction(editBtn)
shareMenu.addAction(cancelAction)
self.present(shareMenu, animated: true, completion: nil)
})
func reportPost(_ indexPath : IndexPath) {
let guest = self.guest[indexPath.row]
let storyboard = UIStoryboard(name: "ReportVC", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "ReportView") as! ReportViewController
vc.reportLbl.text = guest as? String
}
非常感谢任何帮助。
在您的 ReportVC 情节提要中(情节提要的名字很奇怪,但没问题..),select 您的 ReportView 场景(在 InterfaceBuilder 中)并在 Identity Inspector 中验证其情节提要 ID 设置为 "ReportView".还要确保 class 设置为 ReportViewController。
它应该是这样的:
更新:
和techgirl聊天后,发现故事板根本就没有命名"ReportVC"。因此,对于那些阅读此答案的人,还请检查您引用的故事板文件是否正确。
在过去的 2 天里,我一直在研究这个问题并尝试各种选择,但被难住了。我有一个页面,用户可以在其中滑动单元格并看到以下选项
当用户点击“举报用户”时,他们应该会被带到一个页面,其中包含一个允许他们提交对其他用户的投诉的表单。第一个 VC 称为消息,它应该传递报告用户和被报告用户的用户名。现在只有报告用户被传递,因为它在 NSDictionary 中。我尝试过的最新方法是导致应用程序崩溃并显示 'libc++abi.dylib: terminating with uncaught exception of type NSException' 以下是代码示例:
let shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "Report User" , handler: { (action:UITableViewRowAction!, indexPath:IndexPath!) -> Void in
let shareMenu = UIAlertController(title: nil, message: "Report User", preferredStyle: .actionSheet)
let editBtn = UIAlertAction(title: "Harrassment, Inappropriate Content, Abuse", style: .default) { (action:UIAlertAction) in
self.reportPost(indexPath)
}
//let harrassAction = UIAlertAction(title: "Harrassment", style: UIAlertActionStyle.default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)
shareMenu.addAction(editBtn)
shareMenu.addAction(cancelAction)
self.present(shareMenu, animated: true, completion: nil)
})
func reportPost(_ indexPath : IndexPath) {
let guest = self.guest[indexPath.row]
let storyboard = UIStoryboard(name: "ReportVC", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "ReportView") as! ReportViewController
vc.reportLbl.text = guest as? String
}
非常感谢任何帮助。
在您的 ReportVC 情节提要中(情节提要的名字很奇怪,但没问题..),select 您的 ReportView 场景(在 InterfaceBuilder 中)并在 Identity Inspector 中验证其情节提要 ID 设置为 "ReportView".还要确保 class 设置为 ReportViewController。
它应该是这样的:
更新:
和techgirl聊天后,发现故事板根本就没有命名"ReportVC"。因此,对于那些阅读此答案的人,还请检查您引用的故事板文件是否正确。