您好我试图在没有故事板的情况下以编程方式执行segue。目前我将此作为我的代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "popOutNoteExpanded" {
let vc = segue.destination as! ExpandedCellViewController
let cell = sender as! AnnotatedPhotoCell
sourceCell = cell
vc.picture = cell.imageView.image
print("button pressed")
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
performSegue(withIdentifier: "popOutNoteExpanded", sender: indexPath)
}
当我点击集合视图单元格时,它会说:
没有带标识符'popOutNoteExpanded'的segue。
不确定如何执行自定义动画过渡。
答案 0 :(得分:26)
要以编程方式触发segue,您必须按照以下步骤操作:
1.通过在两个视图控制器之间拖动所需的segue 并在“属性检查器”部分中设置其标识符(例如,在您的情况下为“popOutNoteExpanded”)在Storyboard中进行设置。
2.以编程方式调用
performSegue(withIdentifier: "popOutNoteExpanded", sender: cell)
请检查您是否正确设置了标识符。
此外,在上面的代码中,您将错误的发件人。
在 prepare()方法中,您将发件人用作 UITableViewCell ,但是您将 performSegue()与发件人称为 IndexPath 。
你需要一个单元格来调用:
let cell = tableView.cellForRow(at: indexPath)
然后你可以执行一个segue:
performSegue(withIdentifier: "popOutNoteExpanded", sender: cell)
答案 1 :(得分:14)
Segues是故事板的组成部分。如果您没有故事板,则无法执行分段。但您可以像这样使用当前视图控制器:
let vc = ViewController() //your view controller
self.present(vc, animated: true, completion: nil)
答案 2 :(得分:1)
除了正确的答案之外,请注意,如果您在导航堆栈中(例如,您在“设置”页面中并希望转到MyAccountVC),则应使用:
let vc = MyAccountVC()
self.navigationController?.pushViewController(vc, animated: true)
如果在转换过程中导航的VC显示为透明背景,只需将其backgoundColor
设置为.white
。
答案 3 :(得分:0)
在我的情况下,我展示了一个TableViewController,但未定义segue,发现有必要从情节提要中实例化,否则tableViewCells
无法在cellForRowAt
中出队。
let vc = (storyboard.instantiateViewController(withIdentifier: "YourTableViewController") as? YourTableViewController)!
self.navigationController!.pushViewController( vc, animated: true)