整理するのは簡単だと思っていたものにこだわっています。 UITextViewオブジェクトを含むカスタムテーブルセルがあります。このオブジェクトのテキストを灰色にします。インターフェイスビルダーで色を設定すると、灰色で表示されますが、シミュレーターでは黒のままです。
設定方法の概要は次のとおりです。
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:
インターフェイスビルダーでフォントの色をライトグレーに設定:
IPhoneシミュレーターでの表示:
問題を少し解決した後、私は新しい情報を備えたGoogleに戻り、次のStack Overflowの質問を見つけました。
UITextViewの属性の下にある「選択可能」チェックボックスをオンにしないと、色を含むフォントの変更に応答しません。
このチェックボックスをオンにしたところ、すべて正常に機能しています。
ご協力いただきありがとうございます!
UITextViewに住所/電話番号などであることが検出されたテキストが含まれている場合、次のようにtintColorを設定して、検出されたアイテムのテキストの色を変更する必要があります。
self.tvPhone.tintColor = [UIColor blueColor];
これでうまくいきました。色を設定した後、選択可能なはいを設定し、いいえを設定します
cell.txtvComment.selectable = YES;
cell.txtvComment.textColor = [Globals getTextColor]; //set your UIColor
cell.txtvComment.text = comment.commentText;
cell.txtvComment.selectable = NO;
この変更がアプリに反映されないのはちょっと不思議ですが、テキストフィールド用のアウトレットが作成されているので、プログラムで色を設定するコード行を追加することもできます。
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」が実際にテキストフィールドを指していることを確認します。そのポインタを使用してテキストを設定することができたので、それは必要です。