création et remplissage tableView (code) sans storyBoard

2»

Réponses

  • toolsDevtoolsDev Membre
    février 2017 modifié #32

    oui, tu as entièrement raison et je comprends mieux ta réponse :)


    J'avais pas pensée à  ça...


     par contre je comprends le reste de ton post   ;) :



    Dis moi, après que tu as ajouté la tableView à 

    Du coup, je dois utilisé "tableView.removeFromSuperview()" en tout début de ma méthode sender et la finir par un tableView.reloadData() :



    func pushButton(_ sender: UIButton)
    {
    tableView.removeFromSuperview()
    guard var connexion = ConnexionSQLite.sharedInstance else
    {
    print("Erreur de connexion")
    return
    }
    connexion.getDataTables(table:sender.currentTitle! as String)

    tableView = UITableView(frame: CGRect(x:110, y: 30, width:300, height:400))
    tableView.backgroundColor = UIColor(red: 85/255, green: 175/255, blue: 101/255, alpha: 1.0)

    tableView.dataSource = self
    tableView.delegate = self

    self.view.addSubview(tableView)

    for data in connexion.arrayData
    {
    print(data)
    self.dataTable.append(data)
    }
    tableView.reloadData()
    }
  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2017 modifié #33
    Bah non. Si tu insistes à  créer la tableView en code tu devrais déplacer le code de création vers viewDidLoad() pour que tu ne la crées qu'une seule fois.
  • toolsDevtoolsDev Membre
    février 2017 modifié #34

    alors j'ai tout migré dans le viewDidLoad()


    Mais je ne vois pas à  quel moment remove superView ?


     


    Edit:


    de toute façon si je passe par le viewDidLoad() plus besoin de removeSuperview.... mais mon soucis de concaténation des datas dans tableView est toujours là , je vois pas trop comment supprimé les veilles données pour afficher les nouvelles en fait, je t'ai lus, mais datasource devrais refresh avec les nouvelles données, je comprends pas.


  • Joanna CarterJoanna Carter Membre, Modérateur

    mais mon soucis de concaténation des datas dans tableView est toujours là , je vois pas trop comment supprimé les veilles données pour afficher les nouvelles en fait, je t'ai lus, mais datasource devrais refresh avec les nouvelles données, je comprends pas.



    func pushButton(_ sender: UIButton)
    {
    guard var connexion = ConnexionSQLite.sharedInstance else
    {
    print("Erreur de connexion")
    return
    }

    connexion.getDataTables(table:sender.currentTitle! as String)

    self.datatable = [ ]

    for data in connexion.arrayData
    {
    print(data)
    self.dataTable.append(data)
    }

    tableView.reloadData()
    }
  • toolsDevtoolsDev Membre
    février 2017 modifié #36
    J'ai bien pensée à  faire comme toi, rendre mon tableau vide, mais je trouvais ça "Sale"( je ne me fait vraiment pas assez confiance ... 🙄) , n'y a t il rien de natif pour reset les lignes d'une UItableView ? Un genre de remise à  zéro du contenu ?
  • Joanna CarterJoanna Carter Membre, Modérateur
    Comme j'ai déjà  dit, plusieurs fois, la tableView ne "contient" pas de données. En appelant tableView.reloadData(), ça la "vide" et recommence à  appeler les méthodes du dataSource pour la remplir comme et quand nécessaire.


    N'oublies pas, si tu as 100 articles à  montrer dans la tableView, la tableView ne contient jamais plus qu'assez pour remplir les rangs visibles plus deux ou trois pour être prêt quand l'utilisateur scroll. Donc si tu avais 10 rangs visibles, la tableView ne chargerait que 12-14 au même temps.
  • toolsDevtoolsDev Membre
    février 2017 modifié #38


    Comme j'ai déjà  dit, plusieurs fois




    J'ai juste mon idée/mon point de vu, je ne suis pas têtu dans le mauvais sens ;)


     


    J''espère que tu as compris mon point de vue par rapport à  mon choix de ne pas utiliser le stroyboard.


    Maintenant je vais re faire entièrement mon projet en utilisant storyboard !


     


    Du moment que je n'ai pas ma tableView qui s'affiche au lancement de mon application mais bien quand moi je le souhaite (clique d'un bouton) je suis ok :)


     


    Comme ça je verrais la différence et rien n'est perdu en développement, j'aurais appris encore beaucoup grace à  vous !


     


    Question:


    Comment vérifié si justement j'ai un empilement d'objet dans ma vue ?


    Xcode à  un débug poussé et complexe... Mais il m'avait semblé avoir déjà  vu une simulation (un outil natif Xcode) ) où l'on voit bien les divers objets en 3D (après est-ce en action ou de façon static je ne sais pas !)


     


     


    Edit:


    Dans l'outil "debug navigator"


    j'ai la mémoire ram de mon application qui "grimpe" à  23Mo mais reste stable, quand je clique sur mes boutons, est ce normal un "tel" niveau de ram pour une si petite application ?




  • Question:


    Comment vérifié si justement j'ai un empilement d'objet dans ma vue ?


    Xcode à  un débug poussé et complexe... Mais il m'avait semblé avoir déjà  vu une simulation (un outil natif Xcode) ) où l'on voit bien les divers objets en 3D (après est-ce en action ou de façon static je ne sais pas !)




    https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html

  • toolsDevtoolsDev Membre
    février 2017 modifié #40

    Yep ;)


     


    merci, je vais voir ça, avant que je reprenne le développement IOS/Xcode cela n'existait pas ... (ou alors je ne connaissait)


     


    Du coup cela fonctionne uniquement avec le .... storyboard  :P


     


    bon, je vais me mettre à  ce storyboard, je sais que c'est plus rapide et sécurisé... pas de soucis :)

  • Merci  ! tout ceci à  l'air plus que complet et puissant...


    J'ai encore beaucoup à  voir :)




  • Ou, de mon avis, mieux et plus compréhensif, Reveal https://revealapp.com




    Oui, mais 59$ HT quand même ..


     


    Bon, c'est rien pour un usage professionnel.

  • toolsDevtoolsDev Membre
    février 2017 modifié #44

    oui :(


     


    J'avais remarquer après avoir dis merci à  Joanna Carter


     


    mais visiblement une version d'évaluation est dipso, à  voir ce quelle propose vraiment... Si c'est full pendant un temps limité, ou juste limité.


     


    Bref, je ne suis pas un PRO (ça vous l'avez bien remarquer), donc le prix pique pour moi.


     


     


     


    Edit:


     


    Que pensez vous de ce tuto sous swift:


    http://www.supinfo.com/articles/single/903-tutoriel-segue-apps-ios-swift


     


    Est il à  jour, sérieux ? Je peut reprendre sereinement avec lui ? maintenant que j'ai le concept pour mon application. 


  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2017 modifié #45


    J''espère que tu as compris mon point de vue par rapport à  mon choix de ne pas utiliser le stroyboard.




     


    Désolée, la seule raison que j'ai pu trouver était que tu n'avais pas encore compris comment marche les UITableViews.  8--)


     




    Maintenant je vais re faire entièrement mon projet en utilisant storyboard !




     


    :D   :D   :D


    Mais, n'oublies pas d'utiliser l'autolayout et les contraintes de positionnement  :-*


     




    j'ai la mémoire ram de mon application qui "grimpe" à  23Mo mais reste stable, quand je clique sur mes boutons, est ce normal un "tel" niveau de ram pour une si petite application ?




     


    Mon app FestJazz plane autour de 50-60Mo. Ce n'est pas grave. Mais si tu la voyais grimpant chaque fois que quelque de répétitive se passe, ça c'est un drapeau rouge  :'(


  • Joanna CarterJoanna Carter Membre, Modérateur


    Bref, je ne suis pas un PRO (ça vous l'avez bien remarquer), donc le prix pique pour moi.




     


    Quand-même, ça pourrait montrer plus d'infos sur l'autolayout, quelque chose qui fait trébucher pas mal de débutants  ???


     




    Que pensez vous de ce tuto sous swift:


    http://www.supinfo.com/articles/single/903-tutoriel-segue-apps-ios-swift


     


    Est il à  jour, sérieux ? Je peut reprendre sereinement avec lui ? maintenant que j'ai le concept pour mon application. 




     


    C'est très simple et il manque l'autolayout. Même s'il est en anglais, tu pourrais profiter de ce tuto sur autolayout : https://www.raywenderlich.com/115440/auto-layout-tutorial-in-ios-9-part-1-getting-started-2

  • toolsDevtoolsDev Membre
    février 2017 modifié #47

    https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html


     


    Si la version d'évaluation est suffisante je vais voir ça, dans le cas contraire, ça sera sans moi.


     


    Pour ton tuto, l'anglais technique c'est pas trop un soucis pour moi !


     


    si tu me le conseil en plus, je fonce ;)


     


    Merci,


  • Joanna CarterJoanna Carter Membre, Modérateur

    En regardant le auto, tu verras ce qui se passe, lors de la rotation, si on n'utilise pas l'autolayout ; c'est pas jolie  ::)


  • toolsDevtoolsDev Membre
    février 2017 modifié #49

    Bonjour,


     


    Je vous ai écouté et ai tout refait via storyboard ;)


     


    Ayant toujours ma boucle qui construit à  la volé mes boutons par rapport à  mes tables en base (ça je veut le garder)


     


    je rencontre un soucis avec "segue", voici mon architecture :


     


    un NavigationController (qui est le point d'entrée) qui affiche une UIViewController qui contient la boucle de mes boutons et une autre vue, un TableViewController qui contiendra les datas (provenant du mon 1er UIViewController) à  afficher dans ce TableViewController. Via, le clique d'un bouton (lui passant le sender)


     


    Jusqu'à  là , ok. Mais là  ou je rencontre des difficultés est pour donner une segue à  la ma TableViewController, afin de pouvoir l'afficher avec mes données au clique du bouton "table" sélectionner.


     


    je re précise que je souhaite le faire de façon programmatique, sinon je pourrais via le storyboard via la création d'objets UIButton, hors je les créer via une boucle (code)


     


    dans mon UITableViewController "TableViewController" :



    viewDidLoad() :
    // J'affecte la segue "tableViewController" à  ma tableView
    self.performSegue(withIdentifier: "tableViewController", sender: self)

    Et dans mon UIViewController "MainViewController" (point d'entrée) :



    var table = String()

    func pushButton(_ sender: UIButton)
    {
    self.table = sender.currentTitle!
    }

    // pour exécuter l'envoies de mes données
    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
    if segue.identifier == "tableViewController"
    {
    let tableViewController = TableViewController()
    tableViewController.table = self.table
    }
    }

    merci ;)


     


    Edit:


    Je précise aussi que dans mon storyboard toutes mes vues on un classe d'associées.


     


    Edit 2:


    voici, mais je sais pas passé mon sender directement (comme avec la "segue")à  la cette vue ? Et surtout le linker à  mon navigationController pour profiter de la navigation...



    let vc = TableViewController()
    self.present(vc, animated: true, completion: nil)

  • Joanna CarterJoanna Carter Membre, Modérateur
    Whoah !


    Tout d'abord, à  la place de construire les boutons à  la volée dans la première viewController, pourquoi pas utiliser une tableViewController, que tu puisse remplir avec une cellule par nom de table. Là  tu pourrais répondre à  un click sur une de ces cellules, en déclenchant un segue vers la tableView controller, qui contiendrait le contenu de la table choisi ?
  • toolsDevtoolsDev Membre
    février 2017 modifié #51


    Whoah !




     

    Ben oui :) j'écoute ceux qui savent ... :)

     

    oui je le fais déjà  pour la tableViewController, mais je n'aime pas le design de la scroll pour "juste" 5 ou6 boutons.


    Et puis si je veux faire plusieurs colonnes (via du code) de boutons je ne pourrais pas avec un TableViewController...


    car le but est que cette app soit complètement dynamique (je change juste la base sql) et tout fonctionne plug and play :)


    tu vois ?


    Sinon, pour tagé (segue, en codant) une vue on fait comment ? Que je puisse bénéficier de la NavigationController depuis ma TableView, pour avoir le bouton "back" .


  • Joanna CarterJoanna Carter Membre, Modérateur
    OK. À la place d'une tableViwController, tu pourrais utiliser une UICollectionViewController, dont tu peux arranger les cellules en rangs de colonnes, ou colonnes de rangs, ou n'importe quel agencement que tu puisses imaginer.
  • Merci, d'accord je vais voir de ce coté !


     


    mais juste pour savoir, pas de navigation barre avec une TableViewController ? (le bouton "back) 


    une fois cliquer sur ma table(bouton) je me retrouve sur la TableViewController dans l'impossibilité de faire back... 

  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2017 modifié #54
    UINavigationController (rootViewController)-> UICollectionViewController (push segue)-> UITableViewController


    Tu dois avoir un title pour le navigationItem de la première UICollectionViewController pour que le backButton de la UITableViewController montre le title de la première dans le backButton


    https://developer.apple.com/reference/uikit/uinavigationcontroller
Connectez-vous ou Inscrivez-vous pour répondre.