我在这个表ViewController中有两个segue,但是ready(for:segue(中的向下转换不起作用。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
print("into segue")
super.prepare(for: segue, sender: sender)
switch segue.identifier {
case "addItem":
print("addItem Segue")
if let addItemVC = segue.destination as? ItemDetailViewController {
print("if let done")
addItemVC.container = container
} else {
print("WTF")
}
case "editItem":
print("editItem Segue")
if let editItemVC = segue.destination as? ItemDetailViewController {
guard let selectedItemCell = sender as? PriorityListTVCell else {
fatalError("Unexpected sender: (String(describing: sender))")
}
guard let indexPath = tableView.indexPath(for: selectedItemCell) else {
fatalError("The selected cell is not being displayed by the table")
}
editItemVC.editedInfo = list[indexPath.row]
print("passed indexPath.row: (indexPath.row)")
editItemVC.container = container
}
default:
break
}
}
如果我单击"添加"按钮,它将在控制台中打印出来
into segue
addItem Segue
WTF
不知道为什么向下投射不起作用,它与目的地的 segue 类型有什么关系吗? 感谢您的帮助!
if let addItemVC = segue.destination as? ItemDetailViewController {
如果目标 vc 不是 ItemDetailViewController 类型,则不起作用,这意味着您需要在 IB 中分配类名,您可以提供帮助
print(type(of:segue.destination))
对于导航,请执行
if let nav = segue.destination as? UINavigationController ,
let addItemVC = nav.viewControllers?.first as? ItemDetailViewController {}