以编程方式执行segue

时间:2017-05-05 05:43:48

标签: swift transition uicollectionviewcell

您好我试图在没有故事板的情况下以编程方式执行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。

不确定如何执行自定义动画过渡。

4 个答案:

答案 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)