UITableVIewController

Bonjour tout le monde.

 

J'ai un souci depuis quelques jours et j'arrive pas à  savoir ce"qui cloche.

 

J'alimente une UITableViewcontroller avec 3 sections.

 

Mon problème : lorsque je sélectionne les cells, les "index" remontés ne sont pas correct. Normalement, corrigé moi si je me trompe, le système doit renvoyer pour une UITable de 3 sections et 2 cells : ( 0.0; 0.1 et 1.0; 1.1 et 2.0; 2.1) et cela tout le temps quel que soit l'ordre de sélection ....non ?

 

Dans mon cas et malgré refonte plusieurs fois, mes index sont complètement mélangés. je sais pas ce qui va pas.

 

Merc pour votre aide

Réponses

  • colas_colas_ Membre

    Comment alimentes-tu ton TableView ? Par des méthodes - numberOfSections, etc.?


     


    Qu'entends-tu par "ils sont mélangés" ?


     


    Si tu nous expliques un peu plus comment tu t'y prends, on devrait pourvoir t'aider. Tu as dû te mélanger les pinceaux quelque part.


  • LarmeLarme Membre
    mai 2016 modifié #3

    Regarderais-tu ces NSIndexPaths dans tableView:didDeselectItemAtIndexPath: plutôt que tableView:didSelectAtIndexPath: ?


     


    Si ce n'est pas le cas, il va falloir un peu de code:


    Méthode du nombre de Rows par section


    Méthode du nombre de Sections


    Méthode du remplissage de la cellule


    Méthode de sélection.



  • import UIKit

    class AutresTableViewController: UITableViewController {

    @IBOutlet var autresTableView: UITableView!


    let shareElement = ["AAAAA", "BBBBB"]

    let FeedbackElement = ["CCCCC","DDDDD"]

    let reportBugElement = ["EEEEEE","FFFFFF", "GGGGGGG"]


    override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 3
    }


    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    if section == 0 {
    return "PARTAGE"

    }else if section == 1 {
    return "FEEDBACK"

    }else {
    return "REPORT BUG"
    }

    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    if section == 0 {
    return shareElement.count

    }else if section == 1 {
    return FeedbackElement.count

    }else {
    return reportBugElement.count
    }
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.autresTableView.dequeueReusableCellWithIdentifier("autreCell", forIndexPath: indexPath) as! AutreTableViewCell

    if indexPath.section == 0 {
    cell.titresLabel.text = shareElement[indexPath.row]

    }else if indexPath.section == 1 {
    cell.titresLabel.text = FeedbackElement[indexPath.row]

    }else {
    cell.titresLabel.text = reportBugElement[indexPath.row]
    }

    return cell
    }

    override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    //print(indexPath.section)
    print(indexPath.row)
    }


    voila le tout. Merci a vous


  • CéroceCéroce Membre, Modérateur
    mai 2016 modifié #5

    Regarderais-tu ces NSIndexPaths dans tableView:didDeselectItemAtIndexPath: plutôt que tableView:didSelectAtIndexPath: ?


    OUI.
     

        override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)

  • Joanna CarterJoanna Carter Membre, Modérateur

    Pour du code plus professionel :



    class ViewController: UITableViewController
    {
    enum AutresSection : Int, CustomStringConvertible
    {
    case Partage
    case Feedback
    case ReportBug

    var description : String
    {
    switch(self)
    {
    case .Partage:
    return "Partage"
    case .Feedback:
    return "Feedback"
    case .ReportBug:
    return "Report Bug"
    }
    }
    }

    let shareElement = ["AAAAA", "BBBBB"]

    let feedbackElement = ["CCCCC","DDDDD"]

    let reportBugElement = ["EEEEEE","FFFFFF", "GGGGGGG"]

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int
    {
    return 3
    }


    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?
    {
    let sectionIndex = AutresSection(rawValue: section)

    return sectionIndex?.description
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
    let sectionIndex = AutresSection(rawValue: section)!

    switch sectionIndex
    {
    case .Partage:
    return shareElement.count
    case .Feedback:
    return feedbackElement.count
    case .ReportBug:
    return reportBugElement.count
    }
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
    let cell = tableView.dequeueReusableCellWithIdentifier("AutreCell", forIndexPath: indexPath) as! AutreTableViewCell

    let sectionIndex = AutresSection(rawValue: indexPath.section)!

    let rowIndex = indexPath.row

    switch sectionIndex
    {
    case .Partage:
    cell.titresLabel?.text = shareElement[rowIndex]
    case .Feedback:
    cell.titresLabel?.text = feedbackElement[rowIndex]
    case .ReportBug:
    cell.titresLabel?.text = reportBugElement[rowIndex]
    }

    return cell
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
    print("\(indexPath.section) \(indexPath.row)")
    }
    }
  • Merci beaucoup à  tous pour vos réponses.

     

    en effet, DidDeselected et non DidSélectes. Bien vus LARME.

     

    Carter je n'ai pas encore réussi à  utiliser ton code avec ma table view, mais il me semble en effet plus propre. je vais voir pour le comprendre et l'utiliser

  • Joanna CarterJoanna Carter Membre, Modérateur
    mai 2016 modifié #8


     


    Carter ...



     


    Personne ne m'a pas appelé par mon nom de famille depuis j'étais en école  :-*


     




     


    ... je n'ai pas encore réussi à  utiliser ton code avec ma table view, mais il me semble en effet plus propre. je vais voir pour le comprendre et l'utiliser



     


     


    Je ne peux pas imaginer pourquoi tu n'a pas réussit avec mon code, mais il y a des petits soucis avec le tien qui m'inquiètent...


     


    1. Pourquoi déclares-tu une var pour le tableView ? Il y en a déjà  dans le UITableViewController.


     


    2. La var (inutile)` que tu as déclaré aurait dû déclarée en weak et optionnelle, comme la mienne


     


    3. Pourquoi pas enlever les fonctions qui ne qu'appeler leur "super" ?


     


    4. Pourquoi pas enlever la commentaire en warning après que tu as implémenté la fonction ?


     


    Néanmoins, j'ai tué un poney http://alisoftware.github.io/swift/2015/09/06/thinking-in-swift-1/ - du coup, correction ci-dessous :



    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
    guard let cell = tableView.dequeueReusableCellWithIdentifier("AutreCell", forIndexPath: indexPath) as? AutreTableViewCell else
    {
    fatalError("Could not dequeue cell")
    }

    guard let sectionIndex = AutresSection(rawValue: indexPath.section) else
    {
    fatalError("Invalid section index \(indexPath.section)")
    }

    let rowIndex = indexPath.row

    switch sectionIndex
    {
    case .Partage:
    cell.titresLabel?.text = shareElement[rowIndex]
    case .Feedback:
    cell.titresLabel?.text = feedbackElement[rowIndex]
    case .ReportBug:
    cell.titresLabel?.text = reportBugElement[rowIndex]
    }

    return cell
    }

    Si tu as des questions, demandes ! 


  • Tu es magnifique. ::)


    merci beaucoup :)


Connectez-vous ou Inscrivez-vous pour répondre.