4

xcode で imageForState というプロパティを見つけましたが、目的の処理を実行するのに問題があります。ボタンが押されたときに、ボタンの画像に応じてコード ブロックを実行したいと考えています。

- (IBAction)favButton:(UIButton *)sender {
    NSString *currentImage = [sender imageForState:UIControlStateNormal];
    if([currentImage isEqualToString:@"already_fav"])
    {
        // execute code
    }
}

ただし、次のエラーが表示されます。

Incompatible pointer types initializing NSString _strong with an expression type of UIImage

誰かがこれを回避する方法を教えてもらえますか?

4

4 に答える 4

9

文字列と画像を比較できないと思います。ただし、解決策があります。比較したい画像にタグを設定し、比較する画像にタグを設定するだけです。

 image1.tag = 1;
 image.tag =1;

 if(image1.tag == image.tag) {
      // execute code
 }

それが役立つはずです。そうであることを願っています。

ですから、この演習では、お見せします。NSString を UIImage に変更します

 UIImage *currentImage = [sender imageForState:UIControlStateNormal];

 currentImage.tag = 1;
 wantedImage.tag = 1;

if(currentImage.tag == wantedImage.tag) {
   // do something
}

うまくいけば、これはあなたを助けます:)

于 2013-06-09T17:47:08.283 に答える
4

UIImage を作成すると、それは単なる画像であり、文字列値が添付されていません。この名前は UIImage オブジェクトには含まれません。

それが私だった場合 (これが唯一の解決策ではなく、別の提案です)、個々の UIImage オブジェクトを (ここで話している数に応じて) 作成します。

例えば:

UIImage *image1 = [UIImage imageNamed:@"randomName"];
UIImage *image2 = [UIImage imageNamed:@"anotherRandomName"];
[myButton setImage:image2 forState:UIControlStateNormal];
if ([myButton imageForState:UIControlStateNormal] == image1) {
    NSLog(@"The button shows image 1 for normal state");
}
else if ([myButton imageForState:UIControlStateNormal] == image2) {
    NSLog(@"The button shows image 2 for normal state");
}
else {
    NSLog(@"Error!!!!!!! :D");
}
于 2013-06-11T12:26:59.730 に答える
2

画像を文字列として保存することはできません

試す

UIImage *currentImage = [sender imageForState:UIControlStateNormal];

あなたがチェックできるよりも:

if(currentImage == [UIImage imageNamed:@"already_fav"])

于 2013-06-09T17:47:48.613 に答える
2

ボタンでサウンド/サウンドなしの画像を切り替えるためにこれを行いました:

- (IBAction)soundAction:(id)sender {
    UIImage *sound = [UIImage imageNamed:@"sound"];
    UIImage *noSound = [UIImage imageNamed:@"noSound"];

    if ([[sender currentImage] isEqual:sound]) {
        NSLog(@"IF SOUND IMAGE");
        [sender setImage:noSound forState:UIControlStateNormal];
        //your code
    } else if([[sender currentImage] isEqual:noSound]) {
        NSLog(@"IF NO SOUND IMAGE");
        [sender setImage:sound forState:UIControlStateNormal];
        //your code
    }
}
于 2016-08-03T09:42:50.373 に答える