2011-01-31 14 views
1

私は4つの整数値:1,2,3、および4を持っています。 int値を出力する代わりに、対応するテキストに変換する必要があります。int値からのテキストとテキストの色

1 -> my text 1 
2 -> another text 
3 -> yet another one 
4 -> text 4 

また、私は色を変更する必要があります。

1 -> gray 
2 -> black 
3 -> blue 
4 -> green 

だから私はこれをしなかった:

NSArray *myArray = [NSArray arrayWithObjects:@"",@"my text 1",@"another text", @"yet another one", @"text 4", nil]; 
myTextLabel.text = [myArray objectAtIndex:myInt]; 

しかし、どのようにカラーコードを取得しますか?通常、私はこれを行います:

myTextLabel.textColor = [UIColor greenColor]; 

しかし、私はこのリストを使ってどうやってこれを行うことができますか?また、整数値をテキストとテキストカラーコードに変換する最も良い方法は何ですか?おそらくもっと良い方法がありますか?

ありがとうございました&ベストリフレッシュ。

答えて

3

同じ方法:インデックス0の場合

NSArray *myColorArray = [NSArray arrayWithObjects: [UIColor whiteColor], [UIColor greyColor], [UIColor blueColor], [UIColor greenColor], nil]; 
myTextLabel.textColor = [myColorArray objectAtIndex:myInt]; 

は、あなたはnilを使用するので、あなたが使用することはありません知っている色を置くことはできません。

+0

さて、私のエラーは、私が最初の値を定義していること、でした'nil'。しかし、私はこれらの行をどこに統合すべきですか?私は最良の場所は、整数値がクラス変数であるドメインオブジェクトだと思います。私はこれらの値をクラスプロパティとしても設定していますか? – Tim

+0

これは本当にこの配列をどこで使用しているかによって異なります...配列をクラス属性として宣言し、クラスコンストラクタで作成します。また、オブジェクトを作成せずにシングルトンにアクセスする必要がある場合は、静的に宣言することもできます。 – TheSquad

2

これらはコンパイル時にハードコードされていますか?もしそうなら、あなたはこれがうまく機能することを見つけるかもしれない:

static struct { NSString *text; UIColor *color; } map[] = { 
    { @"my text 1"  , [UIColor grayColor ] }, 
    { @"another text" , [UIColor blackColor] }, 
    { @"yet another one", [UIColor blueColor ] }, 
    { @"text 4"   , [UIColor greenColor] }, 
}; 
+0

どうすればアクセスできますか? int値0は存在しないためです。これはデータベースの値です。 – Tim

+0

整数から1を引く。 –

+0

さて、完璧な、私はこれをやった。しかし最後の質問:私は構造体をどこに置くべきですか?私のViewControllerでは動作しますが、ドメインオブジェクトには、@ synthesisizeの後に配置すると 'Initializer要素はコンパイル時定数ではありません.'というエラーが出ます。私はそれが私のドメインオブジェクトに関連していると思うので、そこに配置し、ViewControllerで値にアクセスしてUIにバインドする必要があります。 – Tim

1

は、テキストの色や文字列を取得するために、2つのクラスメソッドを書く:

static NSArray *textColorList = nil; 
static NSArray *stringList = nil; 

// Creates the color list the first time this method is invoked. Returns one color object from the list. 
+ (UIColor *)textColorWithIndex:(NSUInteger)index { 
    if (textColorList == nil) { 
     textColorList = [[NSArray alloc] initWithObjects:[UIColor grayColor], .., nil]; 
    } 

    // Mod the index by the list length to ensure access remains in bounds. 
    return [textColorList objectAtIndex:(index+1) % [textColorList count]]; 
} 

+ (NSString *)stringWithIndex:(NSUInteger)index { 
    if (stringList == nil) { 
     stringList = [[NSArray alloc] initWithObjects: @"my text 1", ... , nil]; 
    } 

    return [stringList objectAtIndex:(index+1) % [stringList count]]; 
} 
関連する問題