source - IOS 7: no se puede establecer el color de fuente de UITextView en la celda UITableView personalizada
uitableviewcell swift 3 (5)
Después de resolver el problema un poco, volví a Google armado con la nueva información y encontré la siguiente pregunta sobre el desbordamiento de pila:
Resulta que si no marca la casilla ''Seleccionable'' debajo de los atributos de UITextView, no responde a ningún cambio de fuente, incluido el color.
Marqué esta casilla y ahora todo está funcionando como esperaba.
¡Gracias por tu ayuda!
Estoy atrapado en lo que pensé que sería una cosa simple de resolver. Tengo una celda de tabla personalizada que contiene un objeto UITextView. Quiero que el texto en este objeto sea gris. Cuando configuro el color en el constructor de interfaz lo muestra como gris, pero en el simulador permanece en negro.
Aquí hay un resumen de cómo está configurado:
- La aplicación se basa en la plantilla maestra / detalle
- Creé una clase que es una subclase de UITableViewCell
- Agregué dos propiedades a la clase, una salida para UILabel y una UITextView
- Modifiqué la celda prototipo predeterminada agregando un UITextView (ya tiene un UILabel)
- Cambié la clase de la celda del prototipo a mi clase de celda personalizada
- Conecté el UITextView y UILabel en la celda a las dos salidas en mi clase celular
Actualicé MasterViewController para poblar mi celda personalizada. Cuando ejecuto el simulador todo funciona bien en términos de las celdas personalizadas que muestran los datos.
Como mencioné anteriormente, el problema surge cuando trato de cambiar el color del texto en el UITextView de la celda personalizada. Si lo configuro en gris claro en el constructor de interfaz, no tiene efecto en el simulador.
He incluido los fragmentos de código relevantes y las capturas de pantalla a continuación. No estoy 100% seguro de qué es relevante para el problema y qué no, si necesita ver algo que no he mostrado a continuación solo pregunte y lo proporcionaré.
** EDITAR
Cuando cierro la sesión de la propiedad de color de mi UITextView, muestra (null). Vea el código MasterViewController.m a continuación.
Celda personalizada - NTFYNoteCell.h
#import <UIKit/UIKit.h>
@interface NTFYNoteCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UITextView *descriptionText;
@end
Tomado de 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;
}
Depurar desde el código anterior:
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 conectado a la salida en mi Celda personalizada:
El color de fuente se establece en gris claro en el generador de interfaz:
Cómo se ve en el simulador de iPhone:
Es un poco desconcertante que este cambio no surta efecto en su aplicación, pero dado que tiene la salida creada para su campo de texto, también podría agregar una línea de código para establecer el color mediante programación:
cell.descriptionText.textColor = [UIColor grayColor];
Esto garantiza que el color se establezca de la manera que desee, de modo que no tenga que depender del Interface Builder.
EDITAR: Mencionaste que ya intentaste esto. Intentaré insertar algunas declaraciones NSLog () en tu código para ver la serie de cambios que estás tratando de hacer:
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 obtiene (nulo) como salida, algo debe estar mal con su campo de texto, ya que DEBE tener un color, incluso un color predeterminado (negro). Reemplace una de las declaraciones NSLog con:
NSLog(@"%@", cell.descriptionText)
para asegurarse de que "descriptionText" apunta en realidad a su campo de texto. Debería, ya que fue capaz de establecer el texto con ese puntero.
Esto funcionó para mí. establecer SÍ seleccionable y establecer No después de configurar el color
cell.txtvComment.selectable = YES;
cell.txtvComment.textColor = [Globals getTextColor]; //set your UIColor
cell.txtvComment.text = comment.commentText;
cell.txtvComment.selectable = NO;
Quería que mi UITextView fuera "Solo lectura" pero cuando desmarqué Editable y Seleccionable el comportamiento no era el esperado, a veces el color del texto no cambiaba y a veces la fuente se restablecía, por lo que mi solución era verificar Editable y seleccionable y desmarcar Interacción del usuario Habilitado en el generador de interfaz
Si su UITextView contiene texto que se detecta que es dirección / número de teléfono / etc., debe establecer tintColor para cambiar el color del texto de los elementos detectados, como este:
self.tvPhone.tintColor = [UIColor blueColor];