2011-11-25 1 views
5

J'ai créé un UILabel dans mon fichier .storyboard qui contient du texte initial "Movie Title". J'ai connecté ce UILabel à une propriété définie dans mes fichiers ViewController. Pour une raison quelconque, le texte ne s'affichera pas dans l'interface utilisateur lorsque j'utiliserai le simulateur. J'ai examiné des questions similaires, mais je n'ai vu aucune réponse qui aide.Le texte UILabel ne s'affiche pas, mais la valeur "texte" est mise à jour (s'affiche dans la console)

J'ai la propriété suivante dans mon fichier .h

@property (strong, nonatomic) IBOutlet UILabel * movieTitle; 

Il est synthétisé dans mon fichier .m

@synthesize movieTitle; 

J'ai alors un code qui effectue les opérations suivantes:

NSLog(@"movie details title in Movie object: %@", _movie.name); 
self.movieTitle = [[UILabel alloc] init]; 
[self.movieTitle setText:self.movie.name]; 
NSLog(@"movie details title in UILabel.text: %@",self.movieTitle.text); 

La console affiche les informations suivantes:

movie details title in Movie object: Transformers 
movie details title in UILabel.text: Transformers 

Répondre

3

Si movieTitle est connecté à une interface Builder UILabel; alors vous ne devriez pas être en train de créer une autre instance:

self.movieTitle = [[UILabel alloc] init]; 

vous définissez le texte du UILabel pas celui dans l'interface graphique.

Il suffit de supprimer cette ligne, voir ci-dessous:

NSLog(@"movie details title in Movie object: %@", _movie.name); 
[self.movieTitle setText:self.movie.name]; 
NSLog(@"movie details title in UILabel.text: %@",self.movieTitle.text); 
6

Assurez-vous que vous définissez la propriété text sur le thread principal. Si ce n'est pas le cas, la valeur sera mise à jour, mais l'étiquette ne sera pas redessinée. Tous les éléments UIKit doivent être mis à jour uniquement sur le thread principal.

De même, vous n'avez besoin de créer un second UILabel que si vous ne vous connectez pas à un IBOutlet dans Interface Builder.

+0

Réponse parfaite à un problème similaire que j'avais. Je mettais le texte dans une file d'attente d'arrière-plan. –

+0

Je définissais des valeurs dans le constructeur et l'interface utilisateur n'était pas mise à jour. Votre solution l'a corrigé mais je me demande pourquoi il n'y a aucun avertissement ou quoi que ce soit dans la console ... – VSG24

2

Cette réponse pourrait ne pas être pour vous mais elle pourrait vous être utile.

Dans mon cas, j'ai mis une étiquette en bas du contrôleur de vue de connexion pour afficher la version de mon application. Lorsque j'exécute l'application, l'étiquette n'apparaît pas. Le problème est que, bien que le fichier .xib de connexion soit ciblé pour Retina 4 Full Screen, la cible de déploiement (dans App Summary) est 5.0, donc lorsque l'application est exécutée (sur simulateur), le simulateur iPhone 5.0 fonctionne, avec un écran de 3.5 "Et puisque l'étiquette est au bas de la vue, c'est hors de la zone de vision de 3.5" écran. Pour résoudre ce problème, modifiez simplement l'auto-numérisation de l'étiquette.

Espérons que cela aide.

Questions connexes