Подтвердить что ты не робот

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

4b9b3361

Ответ 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" на самом деле указывает на ваше текстовое поле. Он должен, так как вы могли установить текст, используя этот указатель.