我有四个整数值:1,2,3和4。 我不必打印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];
但我如何用我的清单做到这一点?而且,将整数值转换为文本和文本颜色代码的最佳方法是什么?也许有更好的方法?
提前谢谢你&最好的Refards。
答案 0 :(得分:3)
以同样的方式:
NSArray *myColorArray = [NSArray arrayWithObjects: [UIColor whiteColor], [UIColor greyColor], [UIColor blueColor], [UIColor greenColor], nil];
myTextLabel.textColor = [myColorArray objectAtIndex:myInt];
对于索引0,您不能使用nil,因此请使用您知道不会使用的颜色。
答案 1 :(得分: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] },
};
答案 2 :(得分:1)
编写两个类方法来获取文本的颜色和字符串:
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]];
}