web-dev-qa-db-fra.com

Effectuer une séquence par programmation

Bonjour, j'essaie de faire une séquence par programmation sans le Storyboard. Actuellement, j'ai ceci comme code:

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)
}

Lorsque je clique sur la cellule de la vue de collection, elle dit ceci:

n'a pas de lien avec l'identifiant 'popOutNoteExpanded'.

Vous ne savez pas comment effectuer ma transition animée personnalisée.

16
ajayb

Les séquences sont des composants du storyboard. Si vous n'avez pas de story-board, vous ne pouvez pas effectuer de séquence. Mais vous pouvez utiliser le contrôleur de vue présent comme ceci:

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

Pour déclencher une séquence par programme, vous devez suivre les étapes suivantes:
1. Configurez-le dans Storyboard par en faisant glisser votre séquence désirée entre deux contrôleurs de vue et définissez son identificateur (par exemple, dans votre cas, il s'agit de "popOutNoteExpanded") dans la section Inspecteur d'attributs.
2. Appelez-le par programme

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

Veuillez vérifier si vous avez défini son identifiant correctement ou non.

De plus, dans votre code ci-dessus, vous mettez n expéditeur incorrect. Dans votre méthode prepare () , vous utilisez l'expéditeur en tant que UITableViewCell , mais vous appelez performSegue () avec l'expéditeur en tant que IndexPath .
Vous avez besoin d’une cellule en appelant:

let cell = tableView.cellForRow(at: indexPath) 

Et puis vous pouvez effectuer une séquence:

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

En plus de la réponse correcte, sachez que si vous vous trouvez dans une pile de navigation (par exemple, vous êtes dans une page de paramètres et souhaitez passer à un compte Mon compte), vous devez utiliser:

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

Si le VC dans lequel vous naviguez apparaît avec un arrière-plan transparent pendant la transition, définissez simplement le backgoundColor sur .white.

2
Rufat Mirza