Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Swift Discussion :

PickerView/ComboBox -> déboitât en Swift


Sujet :

Swift

  1. #1
    Membre à l'essai
    PickerView/ComboBox -> déboitât en Swift
    Bonjour,

    Débutant sous Switch, je souhaite créer une application à destination de mon iPad Pro 11". J'ai télécharger la dernière version de Xcode il y a 2 semaines.

    Je connais d'autres langages (PHP, C/C++, Java...) et les BdD.

    Là, j'essaye de créer sur un écran, plusieurs combobox. J'ai compris (ou je pense avoir compris) qu'il fallait utiliser le composant PickerView.

    Seulement, je n'arrive pas à trouver comment on peut utiliser plusieurs fois ce composant à différents emplacements de mon écran.

    Par exemple, à un endroit j'aimerais avoir une liste déroulante pour choisir un "Assistant", plus loin une deuxième liste déroulante pour choisir un "lieu" et une troisième liste pour choisir les "conditions météorologiques".

    Hors avec PickerView, on ne peut avoir une liste ou alors avoir des listes regroupées ensembles... Question IHM, ce n'est pas top.

    D'ou ma question et mes recherches sur Internet (qui sont pour l'instant resté infructueuses) : est-ce que j'utilise le bon composant ?

    Si oui, comment faire ?

    Si non, existe t-il des composants que l'on peut trouver sur Internet pour réaliser l'objectif que je me suis fixé et qui permettrait d'enrichir la bibliothèque de Xcode ?

    Je vous remercie pour vos rponése. Je vous souhaite un bon dimanche.

    Eric

  2. #2
    Membre habitué
    Réponse
    Bonjour Eric,

    En effet, tu as 2 possibilités :


      Utiliser les composants par défaut de Swift et dans ce cas, tu dois bien utiliser UIPickerView
      Ci-dessous, un exemple de code


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    import UIKit
     
    class ViewController: UIViewController {
     
        let picker1: UIPickerView = {
            let p = UIPickerView()
            p.translatesAutoresizingMaskIntoConstraints = false
            p.backgroundColor = .lightGray
            return p
        }()
     
        let picker2: UIPickerView = {
            let p = UIPickerView()
            p.translatesAutoresizingMaskIntoConstraints = false
            p.backgroundColor = .lightGray
            return p
        }()
     
        let picker3: UIPickerView = {
            let p = UIPickerView()
            p.translatesAutoresizingMaskIntoConstraints = false
            p.backgroundColor = .lightGray
            return p
        }()
     
        let dataPicker1Array = ["Assitant1", "Assitant2", "Assistant3"]
        let dataPicker2Array = ["Bruxelles", "Charleroi", "Mons", "Tournai"]
        let dataPicker3Array = ["Ensoleillé", "Nuageux", "Brouillard"]
     
        override func viewDidLoad() {
            super.viewDidLoad()
     
            self.view.backgroundColor = .white
            self.title = "Développez.com"
     
            picker1.delegate = self
            picker1.dataSource = self
            self.view.addSubview(picker1)
     
            picker2.delegate = self
            picker2.dataSource = self
            self.view.addSubview(picker2)
     
            picker3.delegate = self
            picker3.dataSource = self
            self.view.addSubview(picker3)
     
            setupView(UIScreen.main.bounds.size)
        }
     
        func setupView(_ size: CGSize) {
            picker1.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
            picker1.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
            picker1.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
     
            picker2.topAnchor.constraint(equalTo: picker1.bottomAnchor, constant: 20).isActive = true
            picker2.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
            picker2.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
     
            picker3.topAnchor.constraint(equalTo: picker2.bottomAnchor, constant: 20).isActive = true
            picker3.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
            picker3.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
        }
     
    }
     
    extension ViewController: UIPickerViewDelegate, UIPickerViewDataSource {
     
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
        }
     
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            var nbRec: Int = 0
            if (pickerView == picker1) {
                nbRec = dataPicker1Array.count
            } else if (pickerView == picker2) {
                nbRec = dataPicker2Array.count
            } else if (pickerView == picker3) {
                nbRec = dataPicker3Array.count
            }
            return nbRec
        }
     
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            var rowValue: String?
            if pickerView == picker1 {
                rowValue = dataPicker1Array[row]
            }else if pickerView == picker2 {
                rowValue = dataPicker2Array[row]
            }else if pickerView == picker3 {
                rowValue = dataPicker3Array[row]
            }
           return rowValue
        }
     
    }


    Résultat :




      Deuxième possibilité, utiliser des librairies externes (pod) avec la possibilité de trouver un layout qui ressemblera plus à une combobox.
      Je te conseille de jeter un oeil sur le site https://cocoapods.org



    Bien à toi

    Benjamin

  3. #3
    Membre à l'essai
    Citation Envoyé par benjisan Voir le message
    Bonjour Eric,

    En effet, tu as 2 possibilités :


      Utiliser les composants par défaut de Swift et dans ce cas, tu dois bien utiliser UIPickerView
      Ci-dessous, un exemple de code


    ...
    Bien à toi

    Benjamin
    Bonjour,

    Désolé de vos répondre que maintenant. Mais je ne consulte votre réponse que maintenant. Ce que je ne comprends pas, c'est que je m'étais abonné pour recevoir des notifications. Mais cela n'a pas marché.

    Merci pour cet exemple et piste.

    Je vais les étudier.