Icône / image d'ajout rapide dans UITextField


101

Je voudrais ajouter une icône / image dans UITextField. L'icône / l'image doit être laissée à l'espace réservé.

entrez la description de l'image ici

J'ai essayé ceci:

var imageView = UIImageView();
var image = UIImage(named: "email.png");
imageView.image = image;
emailField.leftView = imageView;

Merci.


74
Vous avez accidentellement ajouté des points-virgules: D
Gerald

10
emailField.leftView = UIImageView(image: UIImage(named: "search")):)
tspentzas

En utilisant, @IBDesignablenous pouvons le faire de manière élégante comme dans cet exemple: stackoverflow.com/a/51841433/8238512
Rizwan

Réponses:


121

Essayez d'ajouter emailField.leftViewMode = UITextFieldViewMode.Always

(La valeur par défaut leftViewModeest Never)

Réponse mise à jour pour Swift 4

emailField.leftViewMode = UITextFieldViewMode.always

emailField.leftViewMode = .always

Hmm cela a fonctionné pour moi, l'avez-vous essayé avec la valeur mise à jour ( UITextFieldViewMode.Always)? Avez-vous une idée de ce qui n'a pas fonctionné? (Par exemple, a-t-il compilé?)
Markus

C'est tout mon code dans la section «ViewWillAppear»: «var imageView = UIImageView (); var image = UIImage (nommé: "email.png"); imageView.image = image; emailTextField.leftView = imageView; emailTextField.leftViewMode = UITextFieldViewMode.Always
informatiker

@informatiker Ok, alors êtes-vous sûr que les connexions sont correctes, si vous définissez par exemple la couleur d'arrière-plan de est-ce emailTextFieldque ça change vraiment? Et êtes-vous sûr que l'image est là? Par exemple, créez un autre UIImageView et chargez le imagedans celui-ci pour vérifier que cela fonctionne.
Markus

4
Oui merci. Le problème était que l'icône était blanche et n'était pas visible sur fond blanc.
informatiker le

5
J'ai continué ma recherche et j'ai finalement réussi à le faire fonctionner, j'ai raté la configuration du cadre pour la vue d'image. On dirait que nous devons définir le cadre sur l'image avant de l'ajouter au champ uitext. Quelque chose comme çaimageView1.frame = CGRect(x: 5, y: 0, width: userName.frame.height, height: userName.frame.height) view.addSubview(imageView1)
Sashi

123

Sahil a une excellente réponse et je voulais prendre cela et l'étendre dans un @IBDesignable afin que les développeurs puissent ajouter des images à leurs UITextFields sur le Storyboard.

Swift 4.2

import UIKit

@IBDesignable
class DesignableUITextField: UITextField {
    
    // Provides left padding for images
    override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
        var textRect = super.leftViewRect(forBounds: bounds)
        textRect.origin.x += leftPadding
        return textRect
    }
    
    @IBInspectable var leftImage: UIImage? {
        didSet {
            updateView()
        }
    }
    
    @IBInspectable var leftPadding: CGFloat = 0
    
    @IBInspectable var color: UIColor = UIColor.lightGray {
        didSet {
            updateView()
        }
    }
    
    func updateView() {
        if let image = leftImage {
            leftViewMode = UITextField.ViewMode.always
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            // Note: In order for your image to use the tint color, you have to select the image in the Assets.xcassets and change the "Render As" property to "Template Image".
            imageView.tintColor = color
            leftView = imageView
        } else {
            leftViewMode = UITextField.ViewMode.never
            leftView = nil
        }
        
        // Placeholder text color
        attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedString.Key.foregroundColor: color])
    }
}

Que se passe-t-il ici?

Ce designable vous permet de:

  • Définir une image sur la gauche
  • Ajouter un remplissage entre le bord gauche de UITextField et l'image
  • Définissez une couleur pour que l'image et le texte de l'espace réservé correspondent

Remarques

  • Pour que la couleur de l'image change, vous devez suivre cette note dans le commentaire du code
  • La couleur de l'image ne changera pas dans le Storyboard. Vous devez exécuter le projet pour voir la couleur dans le simulateur / l'appareil.

Designable dans le Storyboard Storyboard

Lors de l'exécution Durée


5
Ajouté dans imageView.contentMode = .AspectFit, pour éviter le redimensionnement de l'image.
Jerland2

3
Merci beaucoup pour le super message! Je l'ai modifié pour avoir également une option RTL. Code disponible ici: pastebin.com/7CCm6NEB
Ali Almohsen

Beau travail, les gars! J'avais fini par faire la même chose plus tard aussi. Ha ha
Mark Moeykens

14
qu'en est-il du remplissage entre l'image et le texte?
Zaporozhchenko Oleksandr

1
la grande réponse.
Ripa Saha

51

Je veux juste ajouter quelque chose ici:

Si vous souhaitez ajouter l'image sur UITextFieldle côté gauche, utilisez la leftViewpropriété deUITextField

REMARQUE: n'oubliez pas de définir leftViewModesur UITextFieldViewMode.Alwayset pour que le droit rightViewModepar UITextFieldViewMode.Always anddéfaut soitUITextFieldViewModeNever

par exemple

Pour ajouter une image sur le côté gauche

textField.leftViewMode = UITextFieldViewMode.Always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let image = UIImage(named: imageName)
imageView.image = image
textField.leftView = imageView

Pour ajouter une image sur le côté droit

textField.rightViewMode = UITextFieldViewMode.Always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let image = UIImage(named: imageName)
imageView.image = image
textField.rightView = imageView

REMARQUE: certaines choses dont vous devez faire attention lors de l'ajout d'une image sur UITextFieldle côté gauche ou droit.

  • N'oubliez pas de donner un cadre ImageViewdont vous allez ajouterUITextField

    laissez imageView = UIImageView (cadre: CGRect (x: 0, y: 0, largeur: 20, hauteur: 20))

  • si l'arrière-plan de votre image est blanc, l'image ne sera pas visible sur UITextField

  • si vous souhaitez ajouter une image à la position spécifique que vous devez ajouter ImageViewcomme sous-vue de UITextField.

Mise à jour pour Swift 3.0

@Mark Moeykens l'a magnifiquement dépensé et le rend @IBDesignable .

J'ai modifié et ajouté quelques fonctionnalités supplémentaires (ajouter la ligne du bas et le rembourrage pour l'image de droite).

REMARQUE si vous souhaitez ajouter une image sur le côté droit, vous pouvez sélectionner l' Force Right-to-Leftoption dans semanticdans le générateur d'interface (mais pour le bon remplissage d'image ne fonctionnera pas tant que vous n'aurez pas remplacé la méthode rightViewRect).

entrez la description de l'image ici

J'ai modifié cela et je peux télécharger la source à partir d'ici ImageTextField

entrez la description de l'image ici


comment puis-je ajouter cela dans les extensions et appeler dans mon viewcontroller? pouvez-vous me suggérer
narahari_arjun

Très simple! créez simplement une fonction dans l'extension UIViewController et passez imagename et textfield ref lors de l'appel de cette fonction.
Sahil

extension UIViewController {func addLeftImage (imageName: String, textField: UITextField) {textField.leftViewMode = UITextFieldViewMode.Allways let imageView = UIImageView (frame: CGRect (x: 0, y: 0, width: 20, height: 20)) let image = UIImage (nommé: imageName) imageView.image = image textField.leftView = imageView}} et appelez-le comme self.addLeftImage ("imganame", textField: yourtextfield)
Sahil

J'ai essayé de changer la position de l'icône. mais pas changé en utilisant ce code
Rahul Phate

22

UITextField avec image (gauche ou droite)

Une autre façon, inspirée des articles précédents, de créer une extension.

On peut mettre l'image à droite ou à gauche

extension UITextField {

enum Direction {
    case Left
    case Right
}

// add image to textfield
func withImage(direction: Direction, image: UIImage, colorSeparator: UIColor, colorBorder: UIColor){
    let mainView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 45))
    mainView.layer.cornerRadius = 5

    let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 45))
    view.backgroundColor = .white
    view.clipsToBounds = true
    view.layer.cornerRadius = 5
    view.layer.borderWidth = CGFloat(0.5)
    view.layer.borderColor = colorBorder.cgColor
    mainView.addSubview(view)

    let imageView = UIImageView(image: image)
    imageView.contentMode = .scaleAspectFit
    imageView.frame = CGRect(x: 12.0, y: 10.0, width: 24.0, height: 24.0)
    view.addSubview(imageView)

    let seperatorView = UIView()
    seperatorView.backgroundColor = colorSeparator
    mainView.addSubview(seperatorView)

    if(Direction.Left == direction){ // image left
        seperatorView.frame = CGRect(x: 45, y: 0, width: 5, height: 45)
        self.leftViewMode = .always
        self.leftView = mainView
    } else { // image right
        seperatorView.frame = CGRect(x: 0, y: 0, width: 5, height: 45)
        self.rightViewMode = .always
        self.rightView = mainView
    }

    self.layer.borderColor = colorBorder.cgColor
    self.layer.borderWidth = CGFloat(0.5)
    self.layer.cornerRadius = 5
}

}

Utilisation :

if let myImage = UIImage(named: "my_image"){
    textfield.withImage(direction: .Left, image: myImage, colorSeparator: UIColor.orange, colorBorder: UIColor.black)
}

Prendre plaisir :)


1
Vous avez fait ma journée, j'ai personnalisé le "view.backgroundColor" et le "imageView.tintColor" pour le rendre entièrement personnalisable. Merci beaucoup pour votre réponse xD
Andres Paladines

1
C'est génial
Mohamed Haseel

1
Ce sont les meilleures réponses simples
Gerardo Salazar Sánchez

14

Pour créer un remplissage, j'aime placer l'image à l'intérieur d'une vue de conteneur. Vous pouvez supprimer la couleur d'arrière-plan une fois que vous êtes satisfait du placement de l'icône.

entrez la description de l'image ici

let imageView = UIImageView(frame: CGRect(x: 8.0, y: 8.0, width: 24.0, height: 24.0))
let image = UIImage(named: "my_icon")
imageView.image = image
imageView.contentMode = .scaleAspectFit
imageView.backgroundColor = UIColor.red

let view = UIView(frame: CGRect(x: 0, y: 0, width: 32, height: 40))
view.addSubview(imageView)
view.backgroundColor = .green
textField.leftViewMode = UITextFieldViewMode.always
textField.leftView = view

Je vous remercie. Bonne explication avec les couleurs.
Hamid Reza Ansari le

13

pour Swift 3.0 ajouter une image sur le côté gauche de textField

textField.leftView = UIImageView(image: "small-calendar")
textField.leftView?.frame = CGRect(x: 0, y: 5, width: 20 , height:20)
textField.leftViewMode = .always

6

Swift 5

@IBOutlet weak var paswd: UITextField! {
    didSet{
      paswd.setLeftView(image: UIImage.init(named: "password")!)
      paswd.tintColor = .darkGray
      paswd.isSecureTextEntry = true
    }   
 }

J'ai créé une extension

extension UITextField {
  func setLeftView(image: UIImage) {
    let iconView = UIImageView(frame: CGRect(x: 10, y: 10, width: 25, height: 25)) // set your Own size
    iconView.image = image
    let iconContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 35, height: 45))
    iconContainerView.addSubview(iconView)
    leftView = iconContainerView
    leftViewMode = .always
    self.tintColor = .lightGray
  }
}

Résultat

entrez la description de l'image ici


4

2020 - solution raisonnable

En ce qui concerne cette folie d'Apple.

Voici peut-être la manière la plus "claire" et la plus simple de le faire:

entrez la description de l'image ici

Tout d'abord, vous devez déplacer correctement le texte.

Notez ce contrôle qualité critique: https://stackoverflow.com/a/27066764/294884

class TidyTextField: UITextField {
    
    @IBInspectable var leftImage: UIImage? = nil
    @IBInspectable var leftPadding: CGFloat = 0
    @IBInspectable var gapPadding: CGFloat = 0
    
    private var textPadding: UIEdgeInsets {
        let p: CGFloat = leftPadding + gapPadding + (leftView?.frame.width ?? 0)
        return UIEdgeInsets(top: 0, left: p, bottom: 0, right: 5)
    }
    
    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: textPadding)
    }
    
    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: textPadding)
    }
    
    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: textPadding)
    }
    

en continuant, nous devons maintenant faire et déplacer l'image de gauche:

    override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
        var r = super.leftViewRect(forBounds: bounds)
        r.origin.x += leftPadding
        return r
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        setup()
    }
    
    private func setup() {
        if let image = leftImage {
            if leftView != nil { return } // critical!
            
            let im = UIImageView()
            im.contentMode = .scaleAspectFit
            im.image = image
            
            leftViewMode = UITextField.ViewMode.always
            leftView = im
            
        } else {
            leftViewMode = UITextField.ViewMode.never
            leftView = nil
        }
    }
}

Cela semble être le moyen le plus clair et le plus fiable de le faire.


3

J'ai créé un simple IBDesignable. Utilisez-le comme vous le souhaitez. Confirmez simplement votre UITextField à cette classe.

import UIKit

@IBDesignable
class RoundTextField : UITextField {
    @IBInspectable var cornerRadius : CGFloat = 0{
        didSet{
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }

    @IBInspectable var borderWidth : CGFloat = 0 {
        didSet{
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var borderColor : UIColor? {
        didSet {
            layer.borderColor = borderColor?.cgColor
        }
    }

    @IBInspectable var bgColor : UIColor? {
        didSet {
            backgroundColor = bgColor
        }
    }

    @IBInspectable var leftImage : UIImage? {
        didSet {
            if let image = leftImage{
                leftViewMode = .always
                let imageView = UIImageView(frame: CGRect(x: 20, y: 0, width: 20, height: 20))
                imageView.image = image
                imageView.tintColor = tintColor
                let view = UIView(frame : CGRect(x: 0, y: 0, width: 25, height: 20))
                view.addSubview(imageView)
                leftView = view
            }else {
                leftViewMode = .never
            }

        }
    }

    @IBInspectable var placeholderColor : UIColor? {
        didSet {
            let rawString = attributedPlaceholder?.string != nil ? attributedPlaceholder!.string : ""
            let str = NSAttributedString(string: rawString, attributes: [NSForegroundColorAttributeName : placeholderColor!])
            attributedPlaceholder = str
        }
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: 50, dy: 5)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: 50, dy: 5)
    }

}

3

entrez la description de l'image ici
Une autre façon de définir l'icône d'espace réservé et de définir le remplissage sur TextField.

let userIcon = UIImage(named: "ImageName") 
setPaddingWithImage(image: userIcon, textField: txtUsername)

func setPaddingWithImage(image: UIImage, textField: UITextField){
    let imageView = UIImageView(image: image)
    imageView.contentMode = .scaleAspectFit
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 60, height: 50))
    imageView.frame = CGRect(x: 13.0, y: 13.0, width: 24.0, height: 24.0)
    //For Setting extra padding other than Icon.
    let seperatorView = UIView(frame: CGRect(x: 50, y: 0, width: 10, height: 50))
    seperatorview.backgroundColor = UIColor(red: 80/255, green: 89/255, blue: 94/255, alpha: 1)
    view.addSubview(seperatorView)
    textField.leftViewMode = .always
    view.addSubview(imageView)
    view.backgroundColor = .darkGray
    textField.leftViewMode = UITextFieldViewMode.always
    textField.leftView = view
}

2

Swift 3.1

extension UITextField
{
    enum Direction
    {
        case Left
        case Right
    }

    func AddImage(direction:Direction,imageName:String,Frame:CGRect,backgroundColor:UIColor)
    {
        let View = UIView(frame: Frame)
        View.backgroundColor = backgroundColor

        let imageView = UIImageView(frame: Frame)
        imageView.image = UIImage(named: imageName)

        View.addSubview(imageView)

        if Direction.Left == direction
        {
            self.leftViewMode = .always
            self.leftView = View
        }
        else
        {
            self.rightViewMode = .always
            self.rightView = View
        }
    }

}

s'il vous plaît ajouter l'utilisation et ce dont j'ai besoin pour passer le paramètre de trame?
Surya Reddy

dans cette fonction Paramètre "Frame" Utiliser pour la vue gauche ou droite
jethava yogesh

1

Vous pouvez mettre cette fonction dans votre fichier global ou au-dessus de votre classe afin de pouvoir y accéder dans toute l'application. Après cette procédure, vous pouvez appeler cette fonction selon vos besoins dans l'application.

        func SetLeftSIDEImage(TextField: UITextField, ImageName: String){

                let leftImageView = UIImageView()
                leftImageView.contentMode = .scaleAspectFit

                let leftView = UIView()

                leftView.frame = CGRect(x: 20, y: 0, width: 30, height: 20)
                leftImageView.frame = CGRect(x: 13, y: 0, width: 15, height: 20)
                TextField.leftViewMode = .always
                TextField.leftView = leftView

                let image = UIImage(named: ImageName)?.withRenderingMode(.alwaysTemplate)
                leftImageView.image = image
                leftImageView.tintColor = UIColor(red: 106/255, green: 79/255, blue: 131/255, alpha: 1.0)
                leftImageView.tintColorDidChange()

                leftView.addSubview(leftImageView)
            }

            SetLeftSIDEImage(TextField: Your_textField, ImageName:YourImageName) // call function

2
Bienvenue dans StackOverflow, y a-t-il un moyen de fournir des explications avec ce code? Les réponses qui ne contiennent que du code ont tendance à être supprimées parce qu'elles sont de mauvaise qualité. Veuillez également consulter ce guide pour répondre dans la section d'aide: stackoverflow.com/help/how-to-answer
Graham

0

Pourquoi ne pas opter pour l'approche la plus simple. Dans la plupart des cas, vous souhaitez ajouter des icônes telles que font awesome ... Utilisez simplement la bibliothèque font awesome et il serait aussi facile d'ajouter une icône à un champ de texte que ceci:

myTextField.setLeftViewFAIcon(icon: .FAPlus, leftViewMode: .always, textColor: .red, backgroundColor: .clear, size: nil)

Vous devrez d'abord installer cette bibliothèque rapide: https://github.com/Vaberer/Font-Awesome-Swift


5
Pourquoi devrait-on ajouter une bibliothèque entière uniquement pour obtenir un glyphe?

0

Il s'agit d'une version modifiée de la réponse de Mark Moeykens avec un remplissage supplémentaire entre l'image et le texte et une taille d'image réglable au cas où quelqu'un en aurait besoin.

Swift 4

    import UIKit

    @IBDesignable
    class TextFieldWithImage: UITextField {

        override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
            return super.leftViewRect(forBounds: bounds)
        }

        @IBInspectable var leftImage: UIImage? {
            didSet {
                updateView()
            }
        }
        @IBInspectable var leftPadding: CGFloat = 0 {
            didSet {
                updateView()
            }
        }
        @IBInspectable var rightPadding: CGFloat = 0 {
            didSet {
                updateView()
            }
        }
        @IBInspectable var imageMaxHeight: CGFloat = 0 {
            didSet {
                updateView()
            }
        }

        @IBInspectable var color: UIColor = UIColor.lightGray {
            didSet {
                updateView()
            }
        }

        func updateView() {
            if let image = leftImage {
                leftViewMode = UITextField.ViewMode.always

                let containerSize = calculateContainerViewSize(for: image)
                let containerView = UIView(frame: CGRect(x: 0, y: 0, width: containerSize.width, height: containerSize.height))

                let imageView = UIImageView(frame: .zero)
                containerView.addSubview(imageView)
                setImageViewConstraints(imageView, in: containerView)

                setImageViewProperties(imageView, image: image)

                leftView = containerView
            } else {
                leftViewMode = UITextField.ViewMode.never
                leftView = nil
            }

            attributedPlaceholder = NSAttributedString(string: placeholder != nil ? placeholder! : "",
                    attributes: [NSAttributedString.Key.foregroundColor: color])
        }

        private func calculateContainerViewSize(for image: UIImage) -> CGSize {
            let imageRatio = image.size.height / image.size.width
            let adjustedImageMaxHeight = imageMaxHeight > self.frame.height ? self.frame.height : imageMaxHeight

            var imageSize = CGSize()
            if image.size.height > adjustedImageMaxHeight {
                imageSize.height = adjustedImageMaxHeight
                imageSize.width = imageSize.height / imageRatio
            }

            let paddingWidth = leftPadding + rightPadding

            let containerSize = CGSize(width: imageSize.width + paddingWidth, height: imageSize.height)
            return containerSize
        }

        private func setImageViewConstraints(_ imageView: UIImageView, in containerView: UIView) {
            imageView.translatesAutoresizingMaskIntoConstraints = false
            imageView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
            imageView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
            imageView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -rightPadding).isActive = true
            imageView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: leftPadding).isActive = true
        }

        private func setImageViewProperties(_ imageView: UIImageView, image: UIImage) {
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
        }
    }

0

Swift 5

Similaire à @Markus, mais dans Swift 5 :

emailTextField.leftViewMode = UITextField.ViewMode.always
emailTextField.leftViewMode = .always

0

SwiftUI

RoundedRectangle(cornerRadius: 50)
                .frame(height: 40)
                .colorInvert() // sets the background white
            .padding()
            .shadow(radius: 12) // adds shadow to the rectangle
                .overlay(
                    HStack(spacing: 20){

                        Image(systemName: "person")
                            .resizable()
                            .aspectRatio(contentMode: .fit)

                        TextField("Username ", text: $username)
                            .font(Font.custom("Arial", size: 25))


                            .font(.title)
                    }
                    .padding()
                    .padding()
                )

Résultats


0

En utilisant l'extension dans Swift4, nous pouvons facilement mettre l'image à droite ou à gauche avec un rembourrage à TextField.

extension UITextField {

    //MARK:- Set Image on the right of text fields

  func setupRightImage(imageName:String){
    let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
    imageView.image = UIImage(named: imageName)
    let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
    imageContainerView.addSubview(imageView)
    rightView = imageContainerView
    rightViewMode = .always
    self.tintColor = .lightGray
}

 //MARK:- Set Image on left of text fields

    func setupLeftImage(imageName:String){
       let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
       imageView.image = UIImage(named: imageName)
       let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
       imageContainerView.addSubview(imageView)
       leftView = imageContainerView
       leftViewMode = .always
       self.tintColor = .lightGray
     }

  }

Utilisez le code comme pour la configuration de l'image de gauche: -

   self.password_text_field.setupLeftImage(imageName: "unlock")

Production :)

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.