web-dev-qa-db-ja.com

IOS 7-カスタムUITableViewセルでUITextViewのフォント色を設定できません

整理するのは簡単だと思っていたものにこだわっています。 UITextViewオブジェクトを含むカスタムテーブルセルがあります。このオブジェクトのテキストを灰色にします。インターフェイスビルダーで色を設定すると、灰色で表示されますが、シミュレーターでは黒のままです。

設定方法の概要は次のとおりです。

  1. アプリケーションは、マスター/詳細テンプレートに基づいています
  2. UITableViewCellのサブクラスであるクラスを作成しました
  3. クラスに2つのプロパティ、UILabelとUITextViewのアウトレットを追加しました
  4. UITextViewを追加して、デフォルトのプロトタイプセルを変更しました(すでにUILabelがあります)
  5. プロトタイプセルのクラスをカスタムセルクラスに変更しました
  6. セルのUITextViewとUILabelをセルクラスの2つのアウトレットに接続しました

MasterViewControllerを更新して、カスタムセルにデータを入力しました。シミュレーターを実行すると、データを表示するカスタムセルに関してすべて正常に機能します。

前に述べたように、カスタムセルのUITextViewのテキストの色を変更しようとすると問題が発生します。インターフェイスビルダーでこれをライトグレーに設定しても、シミュレーターでは効果がありません。

以下の関連するコードスニペットとスクリーンショットを含めました。問題に何が関連し、何が関連していないかは100%わかりません。以下に示していないものを表示する必要がある場合は、質問して提供します。

**編集

UITextViewのcolorプロパティをログアウトすると、出力されます(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

27
jd182

問題を少し解決した後、私は新しい情報を備えたGoogleに戻り、次のStack Overflowの質問を見つけました。

ITextViewフォントはnil

UITextViewの属性の下にある「選択可能」チェックボックスをオンにしないと、色を含むフォントの変更に応答しません。

このチェックボックスをオンにしたところ、すべて正常に機能しています。

ご協力いただきありがとうございます!

114
jd182

UITextViewに住所/電話番号などであることが検出されたテキストが含まれている場合、次のようにtintColorを設定して、検出されたアイテムのテキストの色を変更する必要があります。

self.tvPhone.tintColor = [UIColor blueColor];
4
Dannie P

UITextViewを「読み取り専用」にしたかったのですが、「編集可能および選択可能」のチェックを外すと、動作が期待したものと異なる場合があり、テキストの色が変更されなかったり、フォントがリセットされたりすることがありました。インターフェイスビルダーで有効

enter image description here

enter image description here

3
Chuy47

これでうまくいきました。色を設定した後、選択可能なはいを設定し、いいえを設定します

cell.txtvComment.selectable = YES;
cell.txtvComment.textColor = [Globals getTextColor]; //set your UIColor
cell.txtvComment.text = comment.commentText;
cell.txtvComment.selectable = NO;
2
NSGodMode

この変更がアプリに反映されないのはちょっと不思議ですが、テキストフィールド用のアウトレットが作成されているので、プログラムで色を設定するコード行を追加することもできます。

cell.descriptionText.textColor = [UIColor grayColor];

これにより、色が希望どおりに設定されるため、Interface Builderに依存する必要がありません。

編集:あなたはすでにこれを試していると述べました。 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ステートメントの1つを以下に置き換えます。

NSLog(@"%@", cell.descriptionText)

「descriptionText」が実際にテキストフィールドを指していることを確認します。そのポインタを使用してテキストを設定することができたので、それは必要です。

0
user2105505