1

以下をコーディングするより良い方法は何ですか? reviewStarsNumber の int 値をチェックし、結果に基づいて適切な uiimage を表示する条件付きコードがいくつかあります。現時点では長いようで、単純化できると想像しています。

助けてくれてありがとう

  if ([reviewsStarsNumber intValue] == 0) {
    UIImage *img = [UIImage imageNamed:@"hstars-0.png"];        
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 10) {
    UIImage *img = [UIImage imageNamed:@"hstars-0_5.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 20) {
    UIImage *img = [UIImage imageNamed:@"hstars-1_0.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 30) {
    UIImage *img = [UIImage imageNamed:@"hstars-1_5.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 40) {
    UIImage *img = [UIImage imageNamed:@"hstars-2_0.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 50) {
    UIImage *img = [UIImage imageNamed:@"hstars-2_5.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 60) {
    UIImage *img = [UIImage imageNamed:@"hstars-3_0.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 70) {
    UIImage *img = [UIImage imageNamed:@"hstars-3_5.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 80) {
    UIImage *img = [UIImage imageNamed:@"hstars-4_0.png"];
    [self.reviewStars setImage:img];
}

if ([reviewsStarsNumber intValue] == 90) {
    UIImage *img = [UIImage imageNamed:@"hstars-4_5.png"];
    [self.reviewStars setImage:img];
}
if ([reviewsStarsNumber intValue] == 100) {
    UIImage *img = [UIImage imageNamed:@"hstars-5_0.png"];
    [self.reviewStars setImage:img];
}
4

8 に答える 8

5

画像の名前を変更すると、次のようになります。

NSUInteger number = [reviewsStarsNumber intValue]
NSString *imageName = [NSString stringWithFormat:@"hstarts-%d.png", number];
UIImage *img = [UIImage imageNamed:imageName];
[self.reviewStars setImage:img];
于 2013-01-25T16:51:19.310 に答える
4
 UImage imageNamed;
 switch([reviewsStarsNumber intValue])
 {
    case 0; imageNamed = hstars0; break;
    case 10: imageNamed = hstars0-5; break;
    // 20,30...
    case 100: imageNamed = hstars5; break;

    default: break;
 }
 [self.reviewStars setImage:img];
于 2013-01-25T16:50:05.683 に答える
2

1. plist ファイルを作成します。たとえば、'hstars' という名前を付けます。キー = 0、10、20... および値 = hstars-0_5.png、hstars-1_5.png hstars-2_5.png のエントリを内部に配置します。

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"hstars" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

2.または

NSDictionary *dict = @{@10:@"hstars-0_5.png", @20:@"hstars-1_5.png", ....}

それからちょうど

UIImage *img = [UIImage imageNamed:[dict objectForKey:[NSNumber numberWithInt:reviewsStarsNumber ]]];
[self.reviewStars setImage:img];
于 2013-01-25T16:58:03.910 に答える
1

いくつかの方法がありますが、最良のオプションはswitchステートメントです。

switch([reviewsStarsNumber intValue])
{
 case 0:
    UIImage *img = [UIImage imageNamed:@"hstars-0.png"];
    [self.reviewStars setImage:img];
    break;
 case 10:
    UIImage *img = [UIImage imageNamed:@"hstars-0_5.png"];
    [self.reviewStars setImage:img];
    break;
.
.
.
.
(etc..)
}
于 2013-01-25T16:50:44.043 に答える
1

switchステートメントを使用できます。

UIImage *img = NULL;
int number = [reviewsStarsNumber intValue];
switch (number)
{
    case 0:
        img = [UIImage imageNamed:@"hstars-0.png"];
        break;

    case 10:
        img = [UIImage imageNamed:@"hstars-0_5.png"];
        break;

    // ...

    default:
        // ...
        break;
}
[self.reviewStars setImage:img];
于 2013-01-25T16:51:30.457 に答える
1

switchステートメントを使用できます。

switch (expression)
{
   case match1:
        statements
        break;
    case match2:
        statements
        break;
    default:
        statements
        break;
}

または、画像ファイルの名前を次のように変更しhstars-<0 - 100>.pngてロードすることもできます。

UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"hstars-%@.png", reviewsStarsNumber]];
[self.reviewStars setImage:img];
于 2013-01-25T16:51:31.840 に答える
1

最初の画像を に変更できる場合hstars-0-0.png、このコードで必要なものが得られるはずです。

int value = [reviewsStarsNumber intValue] / 10

int highIndex = value / 2
int loxIndex = value % 2 == 1 ? 5 : 0

UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"hstars-%d_%d.png", highIndex, lowIndex]];
于 2013-01-26T08:42:47.617 に答える
1

テーブルを作成し、そのテーブルで評価を検索します。

static struct
{
    int rating;
    NSString *image;
} ratings[] =
{
   { 0, @"hstars-0.png" },
   ...
   { 100, @"hstars-5_0.png" }
};

const unsigned numRatings = sizeof(ratings) / sizeof(ratings[0]);
int rating = [reviewsStarsNumber intValue];
BOOL found = NO;
for (unsigned i = 0; i < numRatings && !found; i++)
{
    if (ratings[i].rating == rating)
    {
        UIImage *img = [UIImage imageNamed:ratings[i].image];
        [self.reviewStars setImage:img];
        found = YES;
    }
}

if (!found)
{
    // Perhaps do something if the rating wasn't found?
}
于 2013-01-25T16:52:50.380 に答える