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)
}
}
}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bonjour,
Je penses que ton test "if" dans "didSelectRowAtIndexPath" devrait te mettre sur la piste...
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 == ?
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
dans :
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
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.
Tu peux aussi envoyer ton projet en .zip ! Normalement, on verra l'"erreur" immédiatement.
Colas