Navigué entre les view à  l'aide d'une tableView

rollanorollano Membre
mars 2015 modifié dans API UIKit #1
Bonjour à  tous;

Merci pour votre temps ;) pour vous expliquer rapidement, je travaille avec un sidebar pour réaliser mon menu de navigation.

 


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.


 


 


Le problème :

le problème que je rencontre, est que le code de départ n'a pas été créé avec cette notion de section. du coup, lorsque je clique :

 


(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

  • Eric P.Eric P. Membre
    mars 2015 modifié #2


     


    j'ai un problème avec mes sections. Chaque nouvelle section me renvois cell 0 et 1. Le problème est que ces derniers me renvois les même pages. Je voudrais malgré les sections, me rendre sur les pages. aidez moi svp




     


    Je n'ai rien compris !




  • 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é.



    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if let menu = LeftMenu(rawValue: indexPath.item) {
    self.changeViewController(menu)
    }
    }

    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.

  • Bonjour;

    Il est vrai, j'en ai même oublié la politesse. Je m'en excuse.

     


    Par quoi dois-je remplacer pour enfin régler ce problème  ?


     


  • LarmeLarme Membre

    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.


  • Bonjour à  tous;

    Merci pour votre temps ;) pour vous expliquer rapidement, je travaille avec un sidebar pour réaliser mon menu de navigation.

     


    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.


     


     


    Le problème :

    le problème que je rencontre, est que le code de départ n'a pas été créé avec cette notion de section. du coup, lorsque je clique :

     


    (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 ?


  • LarmeLarme Membre

    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



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

    switch (indexPath.section, indexPath.row){
    case (0, 0):
    self.slideMenuController()?.changeMainViewController(self.mainViewController, close: true)
    case (0, 1):
    self.slideMenuController()?.changeMainViewController(self.presentationViewController, close: true)
    break
    case (1, 0):
    self.slideMenuController()?.changeMainViewController(self.swiftViewController, close: true)
    break
    default:
    break
    }


    }
    }

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