Je suis coincé sur ce que je pensais être une chose simple à régler. J'ai une cellule de tableau personnalisée qui contient un objet UITextView. Je veux que le texte de cet objet soit gris. Lorsque je définit la couleur dans le générateur d'interface, elle s'affiche en gris, mais dans le simulateur, elle reste noire.
Voici un aperçu de sa configuration:
J'ai mis à jour le MasterViewController pour remplir ma cellule personnalisée. Lorsque je lance le simulateur, tout fonctionne bien en termes de cellules personnalisées affichant les données.
Comme je l'ai mentionné précédemment, le problème survient lorsque j'essaie de changer la couleur du texte dans UITextView de la cellule personnalisée. Si je le mets en gris clair dans le générateur d'interface, cela n'a aucun effet dans le simulateur.
J'ai inclus les extraits de code et les captures d'écran pertinents ci-dessous. Je ne suis pas sûr à 100% de ce qui est pertinent au problème et de ce qui ne l'est pas, si vous avez besoin de voir quelque chose que je n'ai pas montré ci-dessous, demandez-le et je vous le fournirai.
** ÉDITER
Lorsque je me déconnecte de la propriété color de mon UITextView, elle sort (null). Voir le code MasterViewController.m ci-dessous.
Cellule personnalisée - NTFYNoteCell.h
#import <UIKit/UIKit.h>
@interface NTFYNoteCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UITextView *descriptionText;
@end
Tiré du MasterViewController.m:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NTFYNoteCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NTFYNote *note = _notes[indexPath.row];
cell.titleLabel.text = [note title];
cell.descriptionText.text = [note shortDescription];
NSLog(@"TEXTVIEW: %@", cell.descriptionText);
NSLog(@"TEXT COLOR: %@", cell.descriptionText.textColor); // This outputs (null)
return cell;
}
Déboguer à partir du code ci-dessus:
2014-01-19 19:42:52.001 appname[5050:70b] TEXTVIEW: <UITextView: 0xa1bfe00; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x8be0530>; layer = <CALayer: 0x8be1fe0>; contentOffset: {0, 0}>
2014-01-19 19:42:52.001 appname[5050:70b] TEXT COLOR: (null)
2014-01-19 19:42:52.004 appname[5050:70b] TEXTVIEW: <UITextView: 0xa1cd400; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x8b8fb40>; layer = <CALayer: 0x8bf5300>; contentOffset: {0, 0}>
2014-01-19 19:42:52.005 appname[5050:70b] TEXT COLOR: (null)
2014-01-19 19:42:52.007 appname[5050:70b] TEXTVIEW: <UITextView: 0xe17e000; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0xd857bb0>; layer = <CALayer: 0xd85d610>; contentOffset: {0, 0}>
2014-01-19 19:42:52.007 appname[5050:70b] TEXT COLOR: (null)
2014-01-19 19:42:52.009 appname[5050:70b] TEXTVIEW: <UITextView: 0x99af200; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x8a81ea0>; layer = <CALayer: 0x8a580c0>; contentOffset: {0, 0}>
2014-01-19 19:42:52.009 appname[5050:70b] TEXT COLOR: (null)
UITextView connecté à la prise dans ma cellule personnalisée:
Couleur de police définie sur gris clair dans le générateur d'interface:
À quoi il ressemble dans le simulateur iPhone:
Après avoir résolu un peu le problème, je suis retourné à Google armé des nouvelles informations et j'ai trouvé la question suivante sur le débordement de pile:
la police UITextView est nulle
Il s'avère que si vous ne cochez pas la case "Sélectionnable" sous les attributs de UITextView, il ne répond à aucun changement de police, y compris la couleur.
J'ai coché cette case et maintenant tout fonctionne comme prévu.
Merci de votre aide!
Si votre UITextView contient du texte détecté comme étant une adresse/un numéro de téléphone/etc., vous devez définir tintColor pour changer la couleur du texte des éléments détectés, comme ceci:
self.tvPhone.tintColor = [UIColor blueColor];
Je voulais que mon UITextView soit en "lecture seule" mais lorsque je décoche Modifiable et Sélectionnable, le comportement n'était pas ce à quoi je m'attendais, parfois la couleur du texte ne changeait pas et parfois la police était réinitialisée, donc ma solution était de cocher Modifiable et Sélectionnable et décocher Interaction utilisateur Activé dans le générateur d'interface
Cela a fonctionné pour moi. définir OUI sélectionnable et définir Non après avoir défini la couleur
cell.txtvComment.selectable = YES;
cell.txtvComment.textColor = [Globals getTextColor]; //set your UIColor
cell.txtvComment.text = comment.commentText;
cell.txtvComment.selectable = NO;
Il est assez surprenant que cette modification ne prenne pas effet dans votre application, mais comme vous avez créé la sortie pour votre champ de texte, vous pourriez aussi bien ajouter une ligne de code pour définir la couleur par programme:
cell.descriptionText.textColor = [UIColor grayColor];
Cela garantit que la couleur est définie sur ce que vous voulez afin que vous n'ayez pas à vous fier à Interface Builder.
EDIT: Vous avez mentionné que vous avez déjà essayé cela. J'essaierais d'insérer des instructions NSLog () dans votre code pour voir la série de modifications que vous essayez d'apporter:
NTFYNoteCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NTFYNote *note = _notes[indexPath.row];
cell.titleLabel.text = [note title];
NSLog(@"descriptionText color:%@", cell.descriptionText.textColor);
cell.descriptionText.text = [note shortDescription];
cell.descriptionText.textColor = [UIColor grayColor];
NSLog(@"descriptionText color:%@", cell.descriptionText.textColor);
return cell;
Si vous obtenez (null) en sortie, quelque chose ne va pas avec votre champ de texte, car il DOIT avoir une couleur, même une couleur par défaut (noir). Remplacez l'une des instructions NSLog par:
NSLog(@"%@", cell.descriptionText)
pour vous assurer que "descriptionText" pointe réellement vers votre champ de texte. Cela devrait, car vous avez pu définir le texte à l'aide de ce pointeur.