Navigué entre les view à l'aide d'une tableView
Le modèle que j'ai récupéré est celui réaliser par DEKATOTRO disponible sur ce lien :https://github.com/d...ControllerSwift .
Seulement le contenu des cellules est en 1 seul bloc. ce qui n'arrange pas mes affaires. En effet, je souhaite avoir quelque chose de plus organisé. C'est pourquoi, j'ai j'intègre la notion de section afin de grouper mes Labels dans des sections.
(section, cellule)
(0,0) : cela renvoie la page "Main" => Ok pour Moi
(0,1) : cela renvoie la page "Présentation" => Ok pour Moi
(1,0) : cela renvoie aussi la page "Main" => PAS OK pour moi, car je voudrais renvoyer la page "SWIFT"
(1,1) : cela renvoie aussi la page "Présentation" => PAS OK pour moi, car je voudrais renvoyer la page "JAVA"
(1,2) : cela renvoie la page "SWIFT" => PAS OK pour moi, car je voudrais renvoyer la page "GO" (suite du menu1)
et ainsi de suite
Que faire ? Aidez moi svp
import UIKit
enum LeftMenu: Int {
case Main = 0
case PresentationViewController
case Swift
case Java
case Go
case NonMenu
}
protocol LeftMenuProtocol : class {
func changeViewController(menu: LeftMenu)
}
class LeftViewController : UIViewController, LeftMenuProtocol {
@IBOutlet weak var tableView: UITableView!
//*********************************************** DEBUT noms des liens du menu ***************************************//
var menus = ["Main", "Présentation"]
var menus1 = ["Swift", "Java", "Go", "NonMenu"]
var menus2 = ["Main2", "Swift2", "Java3", "Go4", "NonMenu5"]
var menus3 = ["EL Coran", "Hadiths"]
var menus4 = ["Azerty", "zaza", "zare"]
//*********************************************** FIN noms des liens du menu ***************************************//
var mainViewController: UIViewController!
var swiftViewController: UIViewController!
var javaViewController: UIViewController!
var goViewController: UIViewController!
var nonMenuViewController: UIViewController!
var presentationViewController: UIViewController!
override init() {
super.init()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.separatorColor = UIColor(red: 224/255, green: 224/255, blue: 224/255, alpha: 1.0)
var storyboard = UIStoryboard(name: "Main", bundle: nil)
let swiftViewController = storyboard.instantiateViewControllerWithIdentifier("SwiftViewController") as SwiftViewController
self.swiftViewController = UINavigationController(rootViewController: swiftViewController)
let javaViewController = storyboard.instantiateViewControllerWithIdentifier("JavaViewController") as JavaViewController
self.javaViewController = UINavigationController(rootViewController: javaViewController)
let goViewController = storyboard.instantiateViewControllerWithIdentifier("GoViewController") as GoViewController
self.goViewController = UINavigationController(rootViewController: goViewController)
//PresentationViewController
let presentationViewController = storyboard.instantiateViewControllerWithIdentifier("PresentationViewController") as PresentationViewController
self.presentationViewController = UINavigationController(rootViewController: presentationViewController)
let nonMenuController = storyboard.instantiateViewControllerWithIdentifier("NonMenuController") as NonMenuController
nonMenuController.delegate = self
self.nonMenuViewController = UINavigationController(rootViewController: nonMenuController)
self.tableView.registerCellClass(BaseTableViewCell.self)
}
// Combien de section il ya dans la table view
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 5
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Taille de la table view (X,Y,Width,Hight) -> fait phiquement dans le storyboard
//tableView.frame = CGRectMake(0, 44, 260, 524)
//renvois les sections du menu
if section == 0 {
return menus.count
}else if section == 1 {
return menus1.count
}else if section == 2 {
return menus2.count
}else if section == 3 {
return menus3.count
}else {
return menus4.count
//return self.items.count;
}
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: BaseTableViewCell = BaseTableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: BaseTableViewCell.identifier)
cell.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0) // Couleur Blanche
//cell.backgroundColor = UIColor(red: 64/255, green: 170/255, blue: 239/255, alpha: 1.0)
//cell.textLabel?.font = UIFont.italicSystemFontOfSize(18)
//cell.textLabel?.textColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0)
// pour les sections cela definis les contenues des cellules
if indexPath.section == 0 {
cell.textLabel?.text = self.menus[indexPath.row]
}else if indexPath.section == 1 {
cell.textLabel?.text = self.menus1[indexPath.row]
}else if indexPath.section == 2 {
cell.textLabel?.text = self.menus2[indexPath.row]
}else if indexPath.section == 3 {
cell.textLabel?.text = self.menus3[indexPath.row]
}else {
cell.textLabel?.text = self.menus4[indexPath.row]
}
/*
// customization de table View (l'ensemble du IF)
if (indexPath.row % 2 == 0) {
cell.backgroundColor = UIColor.clearColor()
} else {
// Definir l'oppacité de la cellule
cell.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.2)
cell.textLabel?.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.0)
}
// Couleur du texte de la celulle
cell.textLabel?.textColor = UIColor.blackColor()
*/
return cell
}
//*********************************************** DEBUT noms des sections ***************************************/ta
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if section == 0 {
return "A"
}else if section == 1 {
return "B"
}else if section == 2 {
return "C"
}else if section == 3 {
return "D"
}else if section == 4 {
return "E"
}else {
return "Autres"
}
}
//*********************************************** FIN noms des sections ******************************************//
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let menu = LeftMenu(rawValue: indexPath.item) {
self.changeViewController(menu)
}
}
func changeViewController(menu: LeftMenu) {
switch menu {
case .Main:
self.slideMenuController()?.changeMainViewController(self.mainViewController, close: true)
case .Swift:
self.slideMenuController()?.changeMainViewController(self.swiftViewController, close: true)
break
case .Java:
self.slideMenuController()?.changeMainViewController(self.javaViewController, close: true)
break
case .Go:
self.slideMenuController()?.changeMainViewController(self.goViewController, close: true)
break
case .NonMenu:
self.slideMenuController()?.changeMainViewController(self.nonMenuViewController, close: true)
break
case .PresentationViewController:
self.slideMenuController()?.changeMainViewController(self.presentationViewController, close: true)
break
default:
break
}
}
}
Réponses
Je n'ai rien compris !
Effectivement c'est très compliqué. La question et le code ...
J'avais un peu de temps, je me suis accroché.
Deux problèmes là -dedans :
- en principe il ne faut pas utiliser la propriété item de NSIndexPath qui n'est définie que pour les collections, par pour les tables
- la valeur de menu sera totalement indépendante de ce qui a été défini dans le label de la cellule, ce sera toujours Main pour la 1ère cellule d'une section, PresentationViewController dans la deuxième, etc. quelle que soit la section.
Par quoi dois-je remplacer pour enfin régler ce problème ?
J'ai pas compris grand chose, je l'avoue.
Il faudrait expliquer clairement ce que tu veux.
Faire un tableau clair avec les données que tu pour tes cellules et où tu veux aller si tu cliques dessus avec en indication le numéro de section et de row.
Car j'ai regardé les menusN et je n'ai pas compris comment cela s'articulait.
Le modèle que j'ai récupéré est celui réaliser par DEKATOTRO disponible sur ce lien :https://github.com/d...ControllerSwift .
Seulement le contenu des cellules est en 1 seul bloc. ce qui n'arrange pas mes affaires. En effet, je souhaite avoir quelque chose de plus organisé. C'est pourquoi, j'ai j'intègre la notion de section afin de grouper mes Labels dans des sections.
(section, cellule)
(0,0) : cela renvoie la page "Main" => Ok pour Moi
(0,1) : cela renvoie la page "Présentation" => Ok pour Moi
(1,0) : cela renvoie aussi la page "Main" => PAS OK pour moi, car je voudrais renvoyer la page "SWIFT"
(1,1) : cela renvoie aussi la page "Présentation" => PAS OK pour moi, car je voudrais renvoyer la page "JAVA"
(1,2) : cela renvoie la page "SWIFT" => PAS OK pour moi, car je voudrais renvoyer la page "GO" (suite du menu1)
et ainsi de suite
Que faire ?
Il faut que tu trouves une logique derrière section/row et chemin vers lequel cela amène et à la fois avec LeftMenu.
Quitte à tester avant ces 2 derniers avec des else/ifs.
Par exemple, tu peux regrouper les 2 premiers :
Si section == 0 ou == 1
alors menu = menus1.count*section+row (j'ai pas vraiment vérifier mais il me semble que cela pourrait marcher)
Sinon si section == 2
si row == 0
alors menu = 0
sinon si menu == 1
alors menu = NonMenu
sinon
alors menu = row+1
Sinon si ? Les 2 derniers sont incohérents par rapport sur reste, je ne sais pas ce que tu veux faire.
Merci pour ta réponse Larme
voila comment j'ai fait finalement