来自int值的文本和文本颜色

时间:2011-01-31 10:44:02

标签: iphone objective-c

我有四个整数值: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。

3 个答案:

答案 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]];
}