0

私のアプリでは、開始文字に応じて、名前ごとに異なる色を表示する必要があります

abcdeABCDE - gray color
:
:
pqrsPQRS - red Color
vuwxyzUVWXYZ - black color.

私はこのように実装しました..

これは私が望む正しい結果をもたらしますが、これは最適な解決策ではありません

これを行う簡単な解決策はありますか

NSString *FirstLetter = [empName substringFromIndex:1];

if ( [FirstLetter isEqualToString:@"p"] || [FirstLetter isEqualToString:@"q"] || [FirstLetter isEqualToString:@"r"] || [FirstLetter isEqualToString:@"=s"] || [FirstLetter isEqualToString:@"P"] || [FirstLetterisEqualToString:@"Q"] || [FirstLetter isEqualToString:@"R"] || [FirstLetter isEqualToString:@"S"])
    {
        cell.textalbel.textColr =[UIColor redColor]; 
    }
4

3 に答える 3

4

これを実装する方法はたくさんありますが、最も簡単なのはおそらく次のとおりです。

static UIColor *colorForFirstLetterOfString(NSString *string) {
    unichar c = [[[string substringToIndex:1] lowercaseString] characterAtIndex:0];
    if (c >= 'a' && c <= 'e') return [UIColor grayColor];
    // ...
    else if (c >= 'p' && c <= 's') return [UIColor redColor];
    else if (c >= 'u' && c <= 'z') return [UIColor blackColor];
    else return nil;
}

ASCII 文字セットの外に出る必要がある場合は、次のように Unicode コード ポイントに数値定数を使用できます。

// lower-case Greek letters
else if (c >= 0x03B1 && c <= 0x03C9) return [UIColor blueColor];

Lまたは、次のように、文字定数に接頭辞を使用できます。

// lower-case Greek letters
else if (c >= L'α' && c <= L'ω') return [UIColor blueColor];
于 2013-06-03T04:48:23.080 に答える
4

開始文字が常に英字 (または に収まる適度に小さい整数で表現できるものunsigned char) である場合、ここに解決策があります (私が考えることができる最速の方法 - 初期化の最初のチェックを除いてジャンプを使用せず、インスタンスのやや重い重みの比較の代わりに、単純な古い整数が使用されNSStringます):

- (UIColor *)colorFromName:(NSString *)name
{
    static UIColor *strs[1 << CHAR_BIT] = { nil };
    static BOOL initted = NO;

    if (!initted) {
        strs['a'] = [UIColor greyColor];
        strs['b'] = [UIColor whiteColor];
        // ...
        strs['z'] = [UIColor blueColor];

        initted = YES;
    }

    unsigned char first = tolower([name characterAtIndex:0]);
    return strs[first];
}
于 2013-06-03T04:45:28.377 に答える
2

これには辞書を使用できます。次のようなもの:

NSString *empName = @"Henry";
UIColor *color = nil;
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
                      [UIColor redColor], @"abcde",
                      [UIColor blueColor], @"fghij",
                      nil];
NSString *firstLetter = [empName substringWithRange:NSMakeRange(0, 1)];
for (NSString *key in dict.keyEnumerator) {
    if ([key rangeOfString:firstLetter options:NSCaseInsensitiveSearch].location != NSNotFound) {
        color = [dict objectForKey:key];
        break;
    }
}

NSLog(@"%@", color);
于 2013-06-03T04:53:51.637 に答える