2017-10-14 5 views
0

Ici, j'ai une classe de modèle dans laquelle je dois passer la valeur sku sélectionnée de la vue de collection à la vue de table dans une autre classe quelqu'un peut-il m'aider à implémenter cela?Comment passer des données de la vue de collection à la classe de vue de table?

Voici le code pour didselect article à la méthode du chemin d'index

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    // Here you can check which Collection View is triggering the segue 
    if collectionView == firstCategory { 

    } else if collectionView == secondCategory { 
     // from other CollectionView 
    }else if collectionView == newCollection{ 
     newPassedSku = newModel[indexPath.item].sku as? String 
     print(newPassedSku) 
    }else{ 

    } 
} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "firstCategorySegue" { 
     _ = segue.destination as! ProductListViewController 
    } 
    else if segue.identifier == "secondCategorySegue" { 
     _ = segue.destination as! ProductListViewController 
    }else if segue.identifier == "newSegue"{ 
     let detailsViewController = segue.destination as! ProductDetailsViewController 
     detailsViewController.index = newPassedSku 
     print(newPassedSku) 
    } 
    else { 
     _ = segue.destination as! ProductDetailsViewController 
    } 
} 
+0

'func prepare (pour segue' est appelé? –

+0

il appelle, mais incapable de transmettre ma valeur @ Mr.Bista –

+0

'si segue.identifier ==" newSegue "{' condition est satisfaite? –

Répondre

0

Fonctionne parfaitement quand Vous devez transmettre des données de la classe de modèle

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "firstCategorySegue" { 
      _ = segue.destination as! ProductListViewController 
     } 
     else if segue.identifier == "secondCategorySegue" { 
      _ = segue.destination as! ProductListViewController 
     }else if segue.identifier == "newSegue"{ 
      let detailsViewController = segue.destination as! ProductDetailsViewController 
      let indexPaths = self.newCollection.indexPathsForSelectedItems 
      let indexPath = indexPaths?[0] 
      let obj = newModel[(indexPath?.row)!] 
      detailsViewController.index = obj.sku as! String 
      print(obj.sku) 
     } 
     else { 
      _ = segue.destination as! ProductDetailsViewController 
     } 
    } 
0

Vous avez Segue direct de la cellule de collection au lieu de partir ViewController. C'est pourquoi la méthode override func prepare(for segue: UIStoryboardSegue, sender: Any?) est appelée avant func collectionView(_ collectionView: UICollectionView, didSelectItemAt.

Vous avez donc essentiellement besoin de faire votre segue de View Controller au prochain View Controller.

Ensuite, vous devez appeler manuellement le segue comme: self.prepare(for: "segueIdentifier", any: nil) à l'intérieur de la méthode func collectionView(_ collectionView: UICollectionView, didSelectIt.

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    if collectionView == newCollection{ 
     newPassedSku = newModel[indexPath.item].sku as? String 
     print(newPassedSku) 
     self.prepare(for: "segueIdentifier", sender: newPassedSku) 
    } 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "newSegue"{ 
     guard index = sender as? String else { 
      return //do not segue if index is not valid 
     } 
     let detailsViewController = segue.destination as! ProductDetailsViewController 
     detailsViewController.index = index 
     print(newPassedSku) 
    } 
} 
+1

Mais comment passer la valeur ici? –

+0

a mis à jour le post! –

0

Vous devez faire votre Segue directement à partir de votre contrôleur CollectionView au contrôleur tableview, vous appelez à partir de cellules CollectionView donc prepareforsegue obtient d'abord appelé

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
if collectionView == newCollection{ 
    newPassedSku = newModel[indexPath.item].sku as? String 
    self.performSegue(withIdentifier: "secondCategorySegue", 
         sender: nil) 
} 

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if segue.identifier == "newSegue"{ 
    let detailsViewController = segue.destination as! ProductDetailsViewController 
    detailsViewController.index = newPassedSku 
} 

}

+0

précédemment essayé votre réponse mais n'a pas fonctionné –

+1

ce qui ne fonctionne pas –

+0

@user édité ma réponse –