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)
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"
}
}
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"
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.
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"
}