[Résolu] Noms de UIView dans un Array

busterTheobusterTheo Membre
mars 2015 modifié dans API UIKit #1

Bonjour,


j'ai tout essayé, j'ai fouiné grave sur le net, et je dois pas être doué, car je n'y parviens pas.


 


Voilà , en gros, comment stocker des noms de UIImageViews (mais aussi de UIScrollViews dans un autre array) dans un array, afin de pouvoir ensuite faire des trucs genre ?


 


J'essaie de transformer un string stocké en nom de UIView...


Les tags sont sur les UIImageViews dans le storyBoard



func calibrerImage(tag: Int) {

// Cette ligne ?????????
leScroll = tabloScrollPhotosCalibrationViews[tag-1] as UIScrollView

leScroll.delegate = self
leScroll.frame = CGRectMake(0, 0, mainScreenSize.width, mainScreenSize.height)
leScroll.userInteractionEnabled = false
self.view.addSubview(leScroll)
// Je ne met pas le reste du code pour les UIImageViews ) c'est pareil
}

Voilà  comment je stocke le tableau, au préalable - Il ne changera pas.



var tabloPatientsImageViews = [String]()
var tabloPhotosCalibrationViews = [String]()
var tabloScrollPhotosCalibrationViews = [String]()


tabloPatientsImageViews = ["frontalPatientImageView","BpnmbPatientImageView","CfnmsPatientImageView","DpnmsPatientImageView","EaiETsPatientImageView"]

tabloPhotosCalibrationViews = ["frontalPatientCalibrationImageView","BpnmbPatientCalibrationImageView","CfnmsPatientCalibrationImageView","DpnmsPatientCalibrationImageView","EaiETsPatientCalibrationImageView"]

tabloScrollPhotosCalibrationViews = ["myScrollfrontalPatientCalibrationImageView","myScrollBpnmbPatientCalibrationImageView","myScrollCfnmsPatientCalibrationImageView","myScrollDpnmsPatientCalibrationImageView","myScrollEaiETsPatientCalibrationImageView"]

Merci d'avance


Mots clés:

Réponses

  • AliGatorAliGator Membre, Modérateur
    Hein ?! ???

    Mais pourquoi tu stockes des String ? C'est un tableau de UIView que tu veux, pourquoi tu ne stockes pas ces UIView du coup ?

    Y'a des bases de la prog à  revoir là , une variable n'est qu'un nom dans ton code qui fait référence à  un objet, et on ne référence pas une variable avec une string. Une string c'est juste du texte. Tu ne peux pas utiliser une string / du texte en un nom de variable (nom qui est abstrait et sera remplacé par des adresses et des registres à  la compilation, etc. rien à  voir avec du texte en dur.

    Ton problème est sans doute dans le vocabulaire. Tu dis "je veux stocker des noms de UIImageViews" ce qui n'a pas de sens. une UIImageView n'a pas de nom. A la limite tu as une (ou plusieurs) variable(s) qui pointe(nt) vers cette UIImageView, mais de là  à  dire que c'est "le nom de l'UIImageView" ça n'a rien à  voir. C'est comme si tu voulais parler d'un objet et que tu le montrais avec ton doigt. Tu ne parles pas du doigt, et y'a même plusieurs personnes qui peuvent montrer l'objet du doigt pour dire "c'est de ça que je parle", mais ça ne fait pas de cet objet le doigt, on ne peut pas dire "le nom de cet objet c'est mon doigt", ça n'a aucun sens. Vraiment aucun.


    Toi ce que tu veux ce n'est pas "stocker des noms de UIImageView", mais "stocker des UIImageView". Donc faut tout simplement faire ça, c'est tout. Tu te fais des tableaux de UIImageView et puis c'est tout, pourquoi chercher compliqué et tordu et insensé ? (Bon et en + tu dis "le tableau ne changera pas" du coup pourquoi tu avais mis des "var" et pas des "let" si tes tableaux ne changent pas ?)
    let tabloPatientsimageViews: [UIImageView] = [frontalPatientImageView, BpnmbPatientImageView, CfnmsPatientImageView, DpnmsPatientImageView, EaiETsPatientImageView]
    let tabloScrollPhotosCalibrationViews = [myScrollfrontalPatientCalibrationImageView, myScrollBpnmbPatientCalibrationImageView, myScrollCfnmsPatientCalibrationImageView, myScrollDpnmsPatientCalibrationImageView, myScrollEaiETsPatientCalibrationImageView]
    ...
    Il suffit donc de créer un tableau de UIScrollView ou de UIImageView ou de UIView (et pas un tableau de chaà®nes de caractères contenant des textes qui n'ont aucun sens particulier au runtime une fois le code compilé)
  • busterTheobusterTheo Membre
    mars 2015 modifié #3

    Merci Alligator pour ta réponse.


    Je vois que je t'ai faché. Désolé.


     


    Mais tu as raison, ce sont bien des Views que je veux stocker en tableaux, et ce qui distingue une View d'une autre, c'est, dans ce cas, le nom (enfin, celui qui pointe vers elle), d'où ma confusion. Il est vrai que je n'arrive pas à  me familiariser avec cette histoire de pointeur, et que je fais des raccourcis sémantiques.


     


    Je note par contre ton code, car j'aurai souvent besoin de faire ce genre de truc, et je n'avais pas trouvé cette syntaxe (sorry).


    C'est top



    let tabloPatientsimageViews: [UIImageView] = [frontalPatie...



     


    En tout cas, en attendant, j'avais opté pour une autre solution, plus simple.



    func calibrerImage(tag: Int) {
    calibrateViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("CalibratePatientStoryboard") as? CalibrateViewController
    self.navigationController!.pushViewController(calibrateViewController, animated: true)

    switch tag {
    case 1:
    calibrateViewController.imageTransmise = frontalPatientImageView.image!
    case 2:
    calibrateViewController.imageTransmise = BpnmbfPatientImageView.image!
    case 3:
    calibrateViewController.imageTransmise = CfnmsPatientImageView.image!
    case 4:
    calibrateViewController.imageTransmise = DpnmsPatientImageView.image!
    case 5:
    calibrateViewController.imageTransmise = EaiETsPatientImageView.image!
    default:
    break
    }
    }

    Mais quand même, j'ai une question :


     


    Imaginons que j'ai :


     


    Un tableau de fruits



    let tabloDesFruits: [String] = ["pomme", "poire", etc]


    Un tableau de légumes



    let tabloDesLégumes: [String] = ["carotte", "radis", etc]

    Plusieurs autres tableaux similaires,


     


    puis


     


    un tableau générique, dans lequel je devrait stoker les noms de ces tableaux.



    let tabloDesTableaux: [String] = ["tabloDesFruits", "tabloDesLégumes", etc]


    Si j'ai bien compris tes précisions, je devrais plutôt faire cela (donc sans guillemets)



    let tabloDesTableaux: [Array] = [tabloDesFruits, tabloDesLégumes, etc]

    Le but étant ensuite de pouvoir faire



    let quelTableau: Array = tabloDesTableaux[1]

    let quelLegume: String = quelTableau[0]

    Je sens que je vais encore t'énerver, :p  , mais j'ai souvent eu l'occasion (en actionScript, ou en javaScript), de faire des variables de variables, je ne sais pas si je m'exprime bien, mais en gros, des noms de variables qui se fabriquent à  partir d'une liste de noms de variables (donc en string).


     


    Voilà , merci encore.  :p




  •  




    let tabloDesLégumes: [String] = ["carotte", "radis", etc]




     


    Ne crois-tu pas qu'Ali sera énervé avec un nom de constante "tabloDesLégumes"? ;)

  • CéroceCéroce Membre, Modérateur
    Utiliser une chaà®ne pour référencer un objet ou une propriété peut être pratique dans certains cas, mais crée des problèmes:
    1) c'est inefficace: un object chaà®ne est bien plus lourd qu'une simple référence.
    2) pendant la frappe, Xcode ne peut pas te proposer de nom de variable, et ne peut pas vérifier son existence.
    3) c'est résolu à  l'exécution et non à  la compilation. De fait, ton code peut très bien compiler, mais ne pas fonctionner. Et il te faudra absolument passer dans le code en question pour t'en rendre compte.
  • Ben non, c'est lui qui met des let.


    Pis, ça n'est qu'un exemple bidon, bien sûr que si je suis amené à  faire cela, je créerais des variables et non pas des constantes.


    Mais merci quand même pour ta remarque.


  • Le problème ne vient pas du "let" ou du "var" mais des accents dans les noms de variables.


    On sait que maintenant on peut tout mettre en nom de variable mais c'est une mauvaise habitude selon moi


  • DrakenDraken Membre
    mars 2015 modifié #8


    Ne crois-tu pas qu'Ali sera énervé avec un nom de constante "tabloDesLégumes"? ;)




    Pour éviter de l'énerver, fais des exemples avec de la VIANDE !



    let tableauDesRepas = ["Boeuf", "Mouton", "Cerf", "Lapin"]

    Et évite ces maudites minuscules accentuées dans le nom des variables. Et je ne parle même pas de l'unicode dans le nom. C'est n'importe quoi.



    let = "Pizza" // C'EST UNE VRAIE LIGNE DE CODE EN SWIFT

    C'est rigolo 30 secondes sur un blog de geeks, mais c'est l'horreur dans un vrai développement.


     


    EDIT : c'est moins marrant quand le forum filtre l'unicode. Je te montre avec une copie d'écran :


     


     


  • Désolé pour les accents dans les noms de variables. Je vous rassure, je n'en met jamais - Sans blague.


    Là , j'ai tapé tout ça à  l'arrache pour la question.


     



     


     


    Utiliser une chaà®ne pour référencer un objet ou une propriété peut être pratique dans certains cas, mais crée des problèmes

    ça veut dire que l'on ne peut pas stocker des noms de variables dans un tableau (comme expliqué plus haut), et les réutiliser ?


     


    Encore merci pour vos précieux commentaires.


  • Tu peux stocker des noms de variables dans un tableau mais la question n'est pas là . 


    LA question est plutôt: "Dans quel but souhaites-tu stocker des noms de variables plutôt que les variables elles-mêmes dans une tableau?"


  • busterTheobusterTheo Membre
    mars 2015 modifié #11

    En se référant à  mon exemple (en début de post), imagine que je sois amené à  choisir un nombre aléatoire, qui me donnera un choix dans mon tableau de tableaux - Ce choix, sera donc, un fruit, un légume ou de la viande (pour Ali).


     


    Puis ensuite un autre nombre, qui sélectionnera le fruit parmi les fruits, ou le légume parmi les légumes, etc.


  • Tu peux (je ne sais pas si ça répondra à  ta question) avoir un tableau (appelons le globalArray) qui contient plusieurs tableaux (vegetablesArray, fruitsArray, etc...)


     


    Dans ce cas, tu traites ton problème directement avec les objets et non avec le nom des variables.


  • busterTheobusterTheo Membre
    mars 2015 modifié #13

    ouais, c'est aussi comme ça que je le vois - Merci pour votre aide.


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