0

IBOutlet 画像が 10 個ある UIViewController があり、画像が 1 つあり、for ループの i に基づいて表示したい i が 3 に等しい場合、img1、img2、img3 をビューに入れる

これが私のコードです。私の問題は表示できないことです。何が問題なのか教えてください。よろしくお願いします。

@property (strong, nonatomic) IBOutlet UIImageView *img1;
@property (strong, nonatomic) IBOutlet UIImageView *img2;
@property (strong, nonatomic) IBOutlet UIImageView *img3;
@property (strong, nonatomic) IBOutlet UIImageView *img4;



- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];

NSLog(@"Card description : %@", [_card description]);

int stampNumber = [_card.stampNumber intValue];

int i = 0;
UIImage *stampIMG = [UIImage imageNamed:@"1.jpg"];

NSLog(@"StampNumber  :  %i", stampNumber);
for (i = 0; i < stampNumber; i++) {
    NSLog(@"i = %i", i);
    switch (i)
    {
        case 0:
            [_img1 setImage:stampIMG];
            NSLog (@"one");
            break;
        case 1:
            [_img2 setImage:stampIMG];
            NSLog (@"two");
            break;
        case 2:
            [_img3 setImage:stampIMG];
            NSLog (@"three");
            break;
        case 3:
            [_img4 setImage:stampIMG];
            NSLog (@"four");
            break;
        case 4:
            [_img5 setImage:stampIMG];
            NSLog (@"five");
            break;
        case 5:
            [_img6 setImage:stampIMG];
            NSLog (@"six");
            break;
        case 6:
            [_img7 setImage:stampIMG];
            NSLog (@"seven");
            break;
        case 7:
            [_img8 setImage:stampIMG];
            NSLog (@"eight");
            break;
        case 8:
            [_img9 setImage:stampIMG];
            NSLog (@"nine");
            break;
        case 9:
            [_img10 setImage:stampIMG];
            NSLog (@"ten");
            break;
        default:
            NSLog (@"test");
            break;
    }
        }

}

これが私のログです:

StampNumber  :  5
2013-03-18 14:14:31.  i = 0
2013-03-18 14:14:31.  one
2013-03-18 14:14:31.  i = 1
2013-03-18 14:14:31.  two
2013-03-18 14:14:31.  i = 2
2013-03-18 14:14:31.  three
2013-03-18 14:14:31.  i = 3
2013-03-18 14:14:31.  four
2013-03-18 14:14:31.  i = 4
2013-03-18 14:14:31.  five
4

3 に答える 3

0

あなたのコードにはいくつかの問題があるようです:

- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];

NSLog(@"Card description : %@", [_card description]);

int stampNumber = [_card.stampNumber intValue];

int i = 0;

/* Like Anoop pointed out, you do need an extension for the image */
UIImage *stampIMG = [UIImage imageNamed:@"1"];

NSLog(@"StampNumber  :  %i", stampNumber);
for (i = 0; i < stampNumber; i++) {
    NSLog(@"i = %i", i);

/* One more point here is although this is easy for 10 images to do a manual check and update (and efficient in this case), its better to use an IBOutletCollection with tag indication if you need.
*/
    switch (i)
    {
        case 0:
            [_img1 setImage:stampIMG];
            NSLog (@"one");
            break;
        case 1:
            [_img2 setImage:stampIMG];
            NSLog (@"two");
            break;
        case 2:
            [_img3 setImage:stampIMG];
            NSLog (@"three");
            break;
        case 3:
            [_img4 setImage:stampIMG];
            NSLog (@"four");
            break;
        case 4:
            [_img5 setImage:stampIMG];
            NSLog (@"five");
            break;
        case 5:
            [_img6 setImage:stampIMG];
            NSLog (@"six");
            break;
        case 6:
            [_img7 setImage:stampIMG];
            NSLog (@"seven");
            break;
        case 7:
            [_img8 setImage:stampIMG];
            NSLog (@"eight");
            break;
        case 8:
            [_img9 setImage:stampIMG];
            NSLog (@"nine");
            break;
        case 9:
            [_img10 setImage:stampIMG];
            NSLog (@"ten");
            break;
        default:
            NSLog (@"test");
            break;
    }
        }


/*
are the _imgi IBOutlets reference outlets from either your story board or xib file?
if so you do not need to add these as subviews.
If not so, then these are supposed to be instantiated in your code and they need to be UIImageView's rather than IBOutlets. IBOutlets are nothing but void type casts just for the compilers efficiency.
*/

    [self.view addSubview:_img1];
    [self.view addSubview:_img2];
    [self.view addSubview:_img3];
    [self.view addSubview:_img4];
    [self.view addSubview:_img5];
    [self.view addSubview:_img6];
    [self.view addSubview:_img7];
    [self.view addSubview:_img8];
    [self.view addSubview:_img9];
    [self.view addSubview:_img10];
}
于 2013-03-18T18:53:51.793 に答える
0

以下を使用する必要があります。

UIImage *stampIMG = [UIImage imageNamed:@"1"];

ファイル拡張子は指定されていませんimageNamed:

于 2013-03-18T18:24:15.050 に答える
0

あなたの問題はコードの他の場所にあると思います。

10個のIBOutlet画像を持つUIViewControllerがあります

10 個の IBOutlet 画像ビューを宣言しました- このように?

@property (weak, nonatomic) IBOutlet UIImageView *img1;

等...?

次に...これらの宣言をストーリーボード/xib の 10 個の imageView にリンクしましたか?

もしそうなら...なぜあなたはこれをしているのですか:

[self.view addSubview:_img1];
[self.view addSubview:_img2];
[self.view addSubview:_img3];

サブビューは既にストーリーボードに追加されています。

ビューをまだ追加していない場合は、ここに問題があります。

たとえば、各ビューを割り当て/初期化すると、次のようになります。

   self.img1 = [[UIImageView alloc] initWithFrame:(CGRect){10,10,50,50}];

IBOutlet は WEAK プロパティであるため、画像は表示されません (オブジェクトがストーリーボードに既に存在すると想定されるため、所有権を主張しません)。

これを見て整理して…

  • ストーリーボードにimageViewを追加します
  • それらをIBOutletsにリンクします
  • しないでくださいaddSubview

その後、動作するはずです

あるいは

  • ストーリーボードにサブビューを追加しないでください
  • それらをSTRONG(非IBOutlet)プロパティとして宣言します

    @property (strong, nonatomic) UIImageView *img1;  
    
  • コードでそれらを割り当て/初期化する

  • addSubview

それもうまくいくはずです

于 2013-03-18T18:56:25.203 に答える