Menu

Bonjour 

 

j'ai créer un menu sur la base d'une table view. quand je clique sur les différentes lignes pour visualiser le viewcontroler concerné je vais toujours sur le même view controller en l'occurence le second. quelqu'un aurait il une idée de ce que j'ai oublié ou mal fait



protocol MenuViewDelegate {
func didSelect(menu: Menu, row: NSIndexPath, inTableView: UITableView)
}

class MenuViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!
var delegate: MenuViewDelegate?
var menu: [Menu] {
get {
return [Menu(), Menu(title:"Sommaire Général"), Menu(title:"Favoris"), Menu(title:"Templess"), Menu(title:"Sign In"), Menu(title:"Info")]
}
}

var cellIdentifier = "cellIdentifier"
lazy var checkMark = UIImageView(image: UIImage(named: "check"))
var selected: Int = 1

override func viewDidLoad() {
super.viewDidLoad()

setupTableView()
}

func setupTableView () {
tableView.reloadData()
if tableView.indexPathsForVisibleRows?.count > 0 {
tableView.selectRowAtIndexPath(tableView!.indexPathsForVisibleRows![selected], animated: true, scrollPosition: .None)
}
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return menu.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell: MenuTableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! MenuTableViewCell
cell.menu = menu[indexPath.row]

if indexPath.row == 0 {
title = "Sommaire général"
cell.userInteractionEnabled = true


} else if indexPath.row == 1 {
title = "Favoris"
cell.userInteractionEnabled = true
}

return cell
}

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 45
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selected = indexPath.row


if title == "Sommaire général"{
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("FirstViewController")
self.showDetailViewController(vc as! FirstViewController, sender: self)


} else if title == "Favoris"{
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("SecondViewController")
self.showDetailViewController(vc as! SecondViewController, sender: self)


}

}
}

Mots clés:

Réponses

  • Bonjour,


    Je penses que ton test "if" dans "didSelectRowAtIndexPath" devrait te mettre sur la piste...


  • Bonjour,


    Tu dois re récupérer le title dans didSelect... avant de faire tes tests.

    Es-tu qu'on puisse tester l'égalité de String avec == ?
  • iLandesiLandes Membre
    août 2016 modifié #4

    Tu utilise pas de segue pour liker tes vues dans Storyboard ?


     


    Tu te base sur title pour définir ton viewController mais où est l'affectation de title ?


     


    Je pense que title est toujours égal à  "Favoris". Tu devrais utiliser la valeur de indexPath.row pour connaitre la ligne sélectionnée ou éventuellement 



    tableView.indexPathForSelectedRow

    dans :



    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {}

  • Sinon il est de bon ton ici de se présenter avant de poster sa première une question.


     


    Ca permet de voir un peu ton niveau et ton exp et donner une réponse appropriée et d'éviter de se faire chambrer par la communauté qui dors encore en ce dimanche matin d'été.


  • Tu utilises la property "title" de la classe UIViewController alors que ce que tu veux, c'est le title de la cell qui a été touchée...


  • Bonsoir, merci pour vos réponses, je vais essayé de comprendre


  • Bonsoir, bon je dois être complètement idiot car je ne trouves absolument pas la solution. Si quelqu'un peut être plus précis ça serait super. merci d'avance


  • func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    selected = indexPath.row



    if selected == 0{

    let vc = self.storyboard!.instantiateViewControllerWithIdentifier("FirstViewController")

    self.showDetailViewController(vc as! FirstViewController, sender: self)



    } else if selected == 1 {

    let vc = self.storyboard!.instantiateViewControllerWithIdentifier("SecondViewController")

    self.showDetailViewController(vc as! SecondViewController, sender: self)



    }


    }

    }
  • Bonjour, merci pour ce retour. j'avais essayé cette solution mais elle ne m'apportait pas plus de résultat. je vais essayé de nouveau pour voir . merci encore


  • Bonsoir, effectivement comme j'avais fait cet essai et que j'ai essayé de nouveau suite à  votre suggestion, ça ne fonctionne pas. j'ai toujours le même résultat quelque soit la ligne sur laquelle je clique je vais toujours sur le second controller.


  • Bonjour,


     


    la solution proposée par colas_ est fonctionnelle, indexPath.row donne la ligne sélectionnée par l'utilisateur. Cependant tu peux essayer de l'afficher avec un print(...) pour voir le résultat (peut être celle valeur est-elle altérée par une autre fonction du programme). Si la valeur est correcte (0 ou 1) il faut peut être chercher du coté de la fonction showDetailViewController ou peut être même dans le storyboard qui sait.

  • Salut Bali,


    En savoir plus sur ton niveau nous aiderait à  t'aiguiller.

    Tu devrais faire un tour par la case présentation pour que l'on puisse adapter notre façon de t'aider.


  • Hello BaliAbali


    Tu peux aussi envoyer ton projet en .zip ! Normalement, on verra l'"erreur" immédiatement.


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