IOS 7 - Невозможно установить цвет шрифта UITextView в пользовательской ячейке UITableView
Я застрял на том, что, как мне казалось, было бы простой задачей разобраться. У меня есть пользовательская ячейка таблицы, которая содержит объект UITextView. Я хочу, чтобы текст в этом объекте был серым. Когда я устанавливаю цвет в построителе интерфейса, он показывает его как серый, но в симуляторе он остается черным.
Здесь прогон, как он настроен:
- Приложение основано на шаблоне master/detail
- Я создал класс, являющийся подклассом UITableViewCell
- Я добавил два свойства в класс, выход для UILabel и UITextView
- Я изменил ячейку прототипа по умолчанию, добавив UITextView (у нее уже есть UILabel)
- Я изменил класс ячейки прототипа на свой собственный класс ячеек
- Я подключил UITextView и UILabel в ячейке к двум выходам в классе ячеек
Я обновил MasterViewController для заполнения моей пользовательской ячейки. Когда я запускаю симулятор, все работает отлично с точки зрения пользовательских ячеек, отображающих данные.
Как я упоминал ранее, проблема возникает, когда я пытаюсь изменить цвет текста в пользовательской ячейке UITextView. Если я установил его в Light Grey в построителе интерфейса, он не повлияет на симулятор.
Я включил соответствующие фрагменты кода и скриншоты ниже. Я не уверен на 100%, что важно для проблемы, а что нет, если вам нужно увидеть что-то, что я не показал ниже, просто спросите, и я его предоставил.
** РЕДАКТИРОВАТЬ
Когда я выхожу из свойства цвета моего UITextView, он выводит (null). См. Ниже код MasterViewController.m.
Пользовательская ячейка - NTFYNoteCell.h
#import <UIKit/UIKit.h>
@interface NTFYNoteCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UITextView *descriptionText;
@end
Взято из 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;
}
Отладка из кода выше:
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 подключен к розетке в моей пользовательской ячейке:
![UITextView connected to outlet]()
Цвет шрифта установлен в серый цвет в конструкторе интерфейса:
![UITextView font color set to Light Grey]()
Как выглядит симулятор iPhone:
![What the table view looks like in the simulator]()
Ответы
Ответ 1
Немного поработав над проблемой, я вернулся к Google, вооруженному новой информацией, и нашел следующий вопрос о переполнении стека:
UITextView font nil
Выключается, если вы не установите флажок "Выбираемый" в атрибутах UITextView, он не отвечает на изменения шрифтов, включая цвет.
Я установил этот флажок, и теперь все работает как ожидалось.
Спасибо за вашу помощь!
Ответ 2
Если ваш UITextView содержит текст, который определяется как адрес/номер телефона/и т.д., вы должны установить tintColor для изменения цвета текста обнаруженных элементов, например:
self.tvPhone.tintColor = [UIColor blueColor];
Ответ 3
Я хотел, чтобы мой UITextView "Только для чтения", но когда я снимаю "Редактируемый" и "Выбираемый", поведение не было тем, что я ожидал, иногда цвет текста не менялся, а иногда шрифт был reset, поэтому мое решение заключалось в проверке Editable и Выбирается и снимите флажок User Interaction Enabled в интерфейсном построителе
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Ответ 4
Это сработало для меня. установите значение YES и установите No после установки цвета
cell.txtvComment.selectable = YES;
cell.txtvComment.textColor = [Globals getTextColor]; //set your UIColor
cell.txtvComment.text = comment.commentText;
cell.txtvComment.selectable = NO;
Ответ 5
Непонятно, что это изменение не вступает в действие в вашем приложении, но поскольку у вас есть выход, созданный для вашего текстового поля, вы можете также добавить строку кода для программного программирования цвета:
cell.descriptionText.textColor = [UIColor grayColor];
Это гарантирует, что цвет установлен на то, что вы хотите, поэтому вам не нужно полагаться на построитель интерфейсов.
EDIT: Вы упомянули, что уже пытаетесь это сделать. Я бы попробовал вставить некоторые инструкции NSLog() в ваш код, чтобы увидеть серию изменений, которые вы пытаетесь сделать:
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;
Если вы получаете (null) в качестве вывода, что-то должно быть не так с вашим текстовым полем, так как оно ДОЛЖНО иметь цвет, даже цвет по умолчанию (черный). Замените один из операторов NSLog на:
NSLog(@"%@", cell.descriptionText)
чтобы убедиться, что "descriptionText" на самом деле указывает на ваше текстовое поле. Он должен, так как вы могли установить текст, используя этот указатель.