Aller au contenu


Photo

affichage/instanciation UIViewController depuis cellule UITableView (segue storyboard)


  • Please log in to reply
26 réponses à ce sujet

#21 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 12 février 2017 - 11:51

Projet complet ci-joint

Fichier(s) joint(s)


  • toolsDev aime ceci

#22 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 12 février 2017 - 12:04

juste une petite question comment tu as fait pour nommé tes objet dans le storyboard ?

je veux parlé de ta tableView et de ItemViewController.

 

Dans le cartouche du dessus on vois leur nom : Tables (tableViewController) et Item View Controller (tableViewController) ?

 

Sinon, je voulais te dires que si j'avais plusieurs segue ("J'ai fait deux segues du UINavigationController") s'étais pour ma fameuse histoire de point d'entrée sur une ViewController puis une tableViewController (et non comme ton exemple directement start l'application sur une tableViewController) Je ne sais pas faire autrement...

 

Je refais tout pour bien comprendre là ! Beaucoup de chose était confuse pour moi, oui...

Edit: et merci pour le Zip ! je vais quand même le refaire à la mano pour mieux comprendre.

 

Merci beaucoup ! !  !



#23 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 12 février 2017 - 12:21

Tu ouvres le projet que j'ai mis en pièce-jointe et tu l'examines  :-*

 

Dans le cartouche du dessus on vois leur nom : Tables (tableViewController) et Item View Controller (tableViewController) ?

 

"Tables" vient du fait que j'ai nommé le navigationItem du TableViewController. Dans le Document Outline, tu vois un bouton qui contient une flèche vers la gauche ; cliques là et tu verras dans le Attributes Inspector, que Title contient Tables.

 

"Item View Controller" vient du nom de la classe du contrôleur, automatiquement fait par Xcode. Ce n'est pas visible à runtime.

 

Sinon, je voulais te dires que si j'avais plusieurs segue ("J'ai fait deux segues du UINavigationController") s'étais pour ma fameuse histoire de point d'entrée sur une ViewController puis une tableViewController (et non comme ton exemple directement start l'application sur une tableViewController) Je ne sais pas faire autrement...

 

Si tu mettais deux segues d'un UINavigationController, c'est en disant que tu veuilles faire deux choses au même temps ou que tu veuilles avoir une choix, mais on ne peut pas le faire.

 

Bien sûr que tu puisses avoir plusieurs segues qui proviennent d'un viewController d'autre type mais, UINavigationController, c'est spécial .


  • toolsDev aime ceci

#24 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 12 février 2017 - 12:28

et merci pour le Zip ! je vais quand même le refaire à la mano pour mieux comprendre.

 

Je n'attendais que tu fasses autrement  8--)


  • toolsDev aime ceci

#25 toolsDev

toolsDev

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 93 messages

Posté 14 février 2017 - 09:42

coucou,

 

bon j'ai bien étudier ton code et je pense en avoir pigé l'essentielle !

 

Cependant j'ai une question, concernant mon idée de démarrer mon application sur une UIVIewController (avec un navigationController de linker sur lui) et que cette vue via des boutons (coder et donc pas dans le storyboard) je veux aller sur une UITableViewController,

tu m'avais déconseiller (comme j'avais fait) de tirer 2 segues du navigationController, une vers le point d'entrée UIViewController et l'autre vers la UITableViewController.

Mais du coup comment le faire ? (storyboard)

 

 

PS:

je vais aussi commencer à m'intéresser à UICollectionView, mais pour mon projet je ne le ferais pour les boutons (tables)



#26 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 14 février 2017 - 11:02

Dans ton image du storyboard, tu montres deux segues de la UINavigationController. Comme je t'ai déjà dit, la UINavigationController fait une pile ou stack ; du coup, on ne peut pas avoir qu'un segue comme rootViewController.

 

Alors, pour faire ce que tu veux, il ne faut que remplacer la première UITableViewController avec une UIViewController avec tes "boutons".

 

Mais là, je te déconseillerais fortement. Tu as fait un projet d'essaie pour voir ce qui se passe avec les boutons si tu fais pivoter le simulateur (menu Hardware | RotateLeft/Right) ?

 

Sans autolayout (possible mais pénible en code) les boutons ne suivent pas la rotation et ne changeront pas leurs agencement.

 

Si tu ne veux pas utiliser la UICollectionView, tu a déjà la UITableView, qui fait, comme je t'ai montré, un rang par table name


  • toolsDev aime ceci

#27 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 14 février 2017 - 11:55

C'est facile avec UICollectionViewController :

class CollectionViewCell: UICollectionViewCell
{
  @IBOutlet private weak var label: UILabel!
  
  var tableName: String?
  {
    didSet
    {
      self.label.text = tableName
    }
  }
}
class CollectionViewController: UICollectionViewController
{
  let tableData = ["Un", "Deux", "Trois"]
  
  let itemData = ["Un" : ["Un1", "Un2", "Un3"], "Deux" : ["Deux1", "Deux2", "Deux3"], "Trois" : ["Trois1", "Trois2", "Trois3"]]
  
  private var selectedIndexPath: IndexPath?
  
  override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
  {
    self.selectedIndexPath = indexPath
    
    self.performSegue(withIdentifier: "showItemSegue", sender: nil)
  }
  
  override func prepare(for segue: UIStoryboardSegue, sender: Any?)
  {
    guard segue.identifier == "showItemSegue",
          let indexPath = selectedIndexPath,
          let itemViewController = segue.destination as? ItemViewController else
    {
      return
    }
    
    let tableName = tableData[indexPath.row]
    
    guard let itemData = itemData[tableName] else
    {
      return
    }
    
    itemViewController.itemsData = (tableName, itemData)
  }
  
  // MARK: UICollectionViewDataSource
  
  override func numberOfSections(in collectionView: UICollectionView) -> Int
  {
    return 1
  }
  
  override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
  {
    return tableData.count
  }
  
  override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
  {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
    
    cell.tableName = tableData[indexPath.item]
    
    return cell
  }
}

Et, dans le storyboard :

 

Fichier joint  storyboard.png   58,75 Ko   0 téléchargement(s)


  • toolsDev aime ceci




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)