web-dev-qa-db-fra.com

IOS 7 - Impossible de définir la couleur de police de UITextView dans une cellule UITableView personnalisée

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:

  1. L'application est basée sur le modèle maître/détail
  2. J'ai créé une classe qui est une sous-classe de UITableViewCell
  3. J'ai ajouté deux propriétés à la classe, une sortie pour un UILabel et un UITextView
  4. J'ai modifié la cellule prototype par défaut en ajoutant un UITextView (il a déjà un UILabel)
  5. J'ai changé la classe de la cellule prototype en ma classe de cellule personnalisée
  6. J'ai connecté UITextView et UILabel dans la cellule aux deux prises de ma classe de cellule

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:

UITextView connected to outlet

Couleur de police définie sur gris clair dans le générateur d'interface:

UITextView font color set to Light Grey

À quoi il ressemble dans le simulateur iPhone:

What the table view looks like in the simulator

27
jd182

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!

114
jd182

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];
4
Dannie P

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

enter image description here

enter image description here

3
Chuy47

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;
2
NSGodMode

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.

0
user2105505