我需要的是检测我的tableView上选择了哪个单元格,并使用indexPath.row
获取我的对象数组的索引personList
,并将该数据传递给另一个View Controller和打印在标签上。
但是,我收到了错误fatal error: unexpectedly found nil while unwrapping an Optional value
以下是我的代码。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
selectedCell = indexPath.row
performSegueWithIdentifier("DetailScreen", sender: nil)
}
override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) {
//detailedView.personName = personList[selectedCell].GetPersonName()
detailedView.LastNameLabel.text = personList[selectedCell].GetLastName()
}
答案 0 :(得分:1)
您应该将有价值的内容传递给detailedView并在viewDidLoad中分配给标签:
detailedView.lastName = personList[selectedCell].GetLastName()
go viewDidload of detailedView:
detailedView.LastNameLabel.text = detailedView.lastName
答案 1 :(得分:1)
问题是你以错误的方式初始化detailedView。这样做:
// IMPORTANT: Override prepareForSegue for your purpose, not performSegueWithIdentifier
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "DetailScreen" {
// Do the initialization here. You don't need a global variable.
if let detailedView = segue.destinationViewController as? PersonDetailScreen {
//detailedView.personName = personList[selectedCell].GetPersonName()
detailedView.LastNameLabel.text = personList[selectedCell].GetLastName()
}
}
}
PS:你正在重写错误的功能。
修改强>
正如评论didSelectRowAtIndexPath
和prepareForSegue
中提到的那样,并不存在,因为您用于创建segue的方法是错误的。有了它,你的代码做错了比做正确的事情。现在,您可能已经通过控制拖动从UITableView
原型单元格到目标视图控制器创建了segue。现在,当您执行此操作时,您告诉必须在单击特定单元格本身时执行segue,这意味着您正在故事板中设置其操作。因此,即使您未实现didSelectRowAtIndexPath
,您的代码仍会在单击单元格时导航到第二个ViewController
。但是您的要求是在单击单元格时必须执行一些自定义操作,然后导航到第二个视图控制器。为此,删除当前segue,然后创建一个新的segue,其标识符与创建普通segue的方式相同 - 通过控制从源ViewContoller(不是tableview单元原型)拖动到目标视图控制器。然后将override func performSegueWithIdentifier(identifier: String, sender: AnyObject?)
函数替换为我在原始答案中提供的函数,然后您的代码将顺利运行。
PS:确保您的标识符名称正确。
'NSInvalidArgumentException', reason: 'Receiver (<PersonDisplay.FirstViewController: 0x7feabaec2870>) has no segue with identifier 'DetailScreen''
这是因为您没有在故事板中正确设置segue的名称。所以纠正这一点。在故事板中指定segue的标识符。