web-dev-qa-db-ja.com

プログラムでセグエを実行する

こんにちは、ストーリーボードなしでプログラムでセグエを実行しようとしています。現在、私はこれを私のコードとして持っています:

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」のセグエはありません。

カスタムアニメーショントランジションの実行方法がわからない。

16
ajayb

セグエはストーリーボードのコンポーネントです。ストーリーボードがない場合は、セグエを実行できません。ただし、次のように現在のView Controllerを使用できます。

let vc = ViewController() //your view controller
self.present(vc, animated: true, completion: nil)
16
kkakkurt

プログラムでセグエをトリガーするには、次の手順を実行する必要があります。
1。ストーリーボードで2つのView Controller間で目的のセグエをドラッグおよび識別子を設定(たとえば、属性インスペクターセクションの「popOutNoteExpanded」)で設定します。
2。プログラムで呼び出す

performSegue(withIdentifier: "popOutNoteExpanded", sender: cell)

識別子を正しく設定しているかどうかを確認してください。

また、上記のコードでは、誤った送信者を指定しています。 prepare()メソッドでは、送信者をUITableViewCellとして使用しますただし、送信者をIndexPathとしてperformSegue()を呼び出します。
次を呼び出すことでセルが必要です。

let cell = tableView.cellForRow(at: indexPath) 

そして、セグエを実行できます:

performSegue(withIdentifier: "popOutNoteExpanded", sender: cell)
26
Quang Nguyen

正しい答えに加えて、ナビゲーションスタックにいる場合(たとえば、[設定]ページにいて、MyAccountVCに移行したい場合)を使用する必要があることに注意してください。

let vc = MyAccountVC()
self.navigationController?.pushViewController(vc, animated: true)

遷移中にナビゲートされたVCが透明な背景で表示される場合は、そのbackgoundColor.whiteに設定するだけです。

2
Rufat Mirza