web-dev-qa-db-fra.com

Modification du texte de Swift UILabel

J'essaie d'apprendre le Swift d'Apple. J'essayais récemment de créer une application graphique, mais j'ai une question:

Comment puis-je interagir avec les éléments GUI de mon application? Par exemple, j'ai utilisé le générateur d'interface pour créer un UILabel, et je l'ai connecté à mon viewcontroller en faisant un contrôle-clic, afin d'obtenir la chose @IBOUTLET. Maintenant, comment puis-je, dans mon contrôleur de vue, modifier le texte de cette étiquette UIL? Pour le dire autrement, quel code puis-je utiliser pour contrôler par programmation le texte de quelque chose sur mon storyboard? Toutes les méthodes que j'ai trouvées en ligne ne semblent fonctionner qu'avec un bouton généré dans le code, pas un bouton généré sur un storyboard.

J'ai vu du code comme

self.simpleLabel.text = "message"

Si c'est le cas, comment le lier à l'étiquette en question? En d'autres termes, comment puis-je adapter ce code pour être connecté à l'IBOutlet (si c'est ce que je fais)

23
rocket101

Si vous avez correctement lié le contrôle avec une IBOutlet sur votre classe UIViewController, alors la propriété y est ajoutée et vous remplacez simplement simpleLabel par ce que vous avez nommé votre connexion IBOutlet pour ressembler à ceci:

class MyViewController: UIViewController {
    @IBOutlet weak var myLabel: UILabel!
    func someFunction() {
        self.myLabel.text = "text" 
    }
}
28
Alex Zielenski

Le magasin que vous avez créé doit avoir été nommé par vous. La prise appartient à votre contrôleur de vue. self.simpleLabel signifie 'récupérer la valeur de la propriété my nommée' simpleLabel '.

Étant donné que différents points de vente ont des noms différents, utilisez self.simpleLabel ici ne fonctionnera pas tant que votre point de vente ne sera pas nommé "simpleLabel". Essayez de remplacer "simpleLabel" par le nom que vous avez donné à la prise lorsque vous l'avez créée.

La bonne façon serait maintenant:

self.yourLabelName.text = "message"
23
duci9y

Si vous avez quelque chose comme ça pour un IBOutlet:

@IBOutlet var someLabel: UILabel!

alors vous pouvez définir la propriété text comme dans votre exemple:

someLabel.text = "Whatever text"

Si vous rencontrez des problèmes avec cela, vous n'assignez peut-être pas la propriété de texte au bon endroit. Si elle se trouve dans une fonction qui n'est pas appelée, cette ligne ne s'exécutera pas et la propriété text ne changera pas. Essayez de remplacer la fonction viewDidLoad et placez-y la ligne, comme ceci:

override func viewDidLoad() {
    super.viewDidLoad()
    someLabel.text = "Whatever text"
}

Ensuite, dès que la vue se charge, vous définissez la propriété text. Si vous n'êtes pas sûr si une ligne de code est en cours d'exécution ou non, vous pouvez toujours y placer un point d'arrêt ou ajouter une sortie. Quelque chose comme

println("Checkpoint")

à l'intérieur d'un bloc de code dont vous n'êtes pas sûr pourrait vraiment vous aider à voir quand et s'il s'exécute.

J'espère que cela t'aides.

4
Matt

Vous pouvez essayer de modifier un composant d'interface utilisateur ne figurant pas dans le thread principal, dans ce cas, procédez comme suit:

DispatchQueue.main.async {
        someLabel.text = "Whatever text"
}
4
itamarb