我有一个显示单元格列表的tableView。我需要捕获所选单元格,并根据indexPath.row
传递我的对象数据,以在我的第二视图控制器上显示它。我的didSelectRowAtIndexPath
工作正常,但我可能不熟悉performSegueWithIdentifier
的语法,因为它无法调用该方法。
对不起,我是Swift编程的新手,如果您能解释更多细节,我们将不胜感激。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
selectedCell = indexPath.row
performSegueWithIdentifier("DetailScreen", sender: self)
}
override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) {
detailedView.personName = personList[selectedCell].GetPersonName()
}
答案 0 :(得分:1)
解决方案1
首先,确保您的第一个和第二个视图控制器之间存在segue(从表视图控制器1到详细信息视图屏幕)。确保segue具有名称
现在在你的第一个视图控制器的didSelectRowAtIndexPath
事件中,像这样调用segue。
performSegueWithIdentifier("DetailScreen", sender: nil)
现在,在第一个视图控制器的prepareForSegue
方法中,您可以对其进行自定义以发送更多详细信息。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if(segue.identifier=="DetailScreen")
{
let ctrl = segue.destinationViewController as! YourDetailsViewController
ctrl.personName = "Set some person name here"
}
}
假设您的详细信息屏幕的类名为YourDetailsViewController
,并且它具有一个名为personName
的字符串类型的属性。您可以更新代码以使用真实的视图控制器。
解决方案2
如果您不想创建segue,可以通过编程方式导航(实际上将第二个视图控制器推到前面)到第二个视图。在你的第一个视图控制器中,didSelectIndexPathAtRow方法,
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
let ctrl = self.storyboard?.instantiateViewControllerWithIdentifier("DetailsCtrl")
as? YourDetailsViewController
ctrl?.personName="Set some name here"
self.navigationController?.pushViewController(ctrl!, animated: true)
}
要使上述代码生效,您需要确保在第二个视图控制器上将StoryBoardID设置为“DetailsCtrl”(详细信息视图)
答案 1 :(得分:0)
您已将故事板segue设置如下:
单击segue并添加标识符
您可以使用以下代码达到上述要求,这对我有用:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
let storyboard1 = UIStoryboard(name: "Main", bundle: nil)
let detail = storyboard1.instantiateViewControllerWithIdentifier("DetailScreen") as! SecondViewController
detail.personName = personList[selectedCell].GetPersonName()
self.navigationController?.pushViewController(detail, animated: true)
}
从第一个视图控制器到第二个视图控制器的故事板应该是“推送”。
希望这可能会有所帮助。