0

そこで、次の2つの関数を使用して、ボタンの画像とUIImageViewの画像を変更します。

- (IBAction)changeButton:(id)sender {


    //switch image to group if it is a badge. switch image to badge if it is a group.

    if([[properties objectForKey:@"current_item"] isEqualToString:@"badge"]){
        NSLog(@"reaching badge");
        UIImage *imageToSet = [UIImage imageNamed:current_group_image];
        [changeButtonOutlet.imageView setImage:imageToSet];
        [properties setObject:@"group" forKey:@"current_item"];
    } else {
        if([[properties objectForKey:@"current_item"] isEqualToString:@"group"]){
            NSLog(@"reaching group");
            UIImage *imageToSet = [UIImage imageNamed:current_badge_image];
            [changeButtonOutlet.imageView setImage:imageToSet];         
            [properties setObject:@"badge" forKey:@"current_item"];

        } 
    }

    [self switchBadgeImage];
}

-(void)switchBadgeImage{
    if([[properties objectForKey:@"current_item"] isEqualToString:@"badge"]){
        [badgeImageView setImage:[UIImage imageNamed:current_badge_image ]];
    } else {
    if([[properties objectForKey:@"current_item"] isEqualToString:@"group"]){
        [badgeImageView setImage:[UIImage imageNamed:current_group_image ]];    
    }
    }

}

ただし、画像は更新されません。changeButton IBActionをスパムすると、画像が変化しているのをすぐに確認できる場合がありますが、常にデフォルトの画像に戻ります(ボタンのみ)。

ボタンを繰り返し押すと、コンソールログに次のように表示されます。

2012-08-24 12:20:52.414 MyApp[1448:707] reaching group
2012-08-24 12:20:52.559 MyApp[1448:707] reaching badge
2012-08-24 12:20:52.687 MyApp[1448:707] reaching group
2012-08-24 12:20:52.846 MyApp[1448:707] reaching badge
2012-08-24 12:20:52.976 MyApp[1448:707] reaching group
2012-08-24 12:20:53.117 MyApp[1448:707] reaching badge
2012-08-24 12:20:53.262 MyApp[1448:707] reaching group
2012-08-24 12:20:53.348 MyApp[1448:707] reaching badge

私は何が間違っているのですか?みんなありがとう!


編集:それを修正しました!更新されたコードは次のとおりです。

-(void)switchBadgeImage {NSLog(@ "current group image:%@"、current_group_image); NSLog(@ "現在のバッジ画像:%@"、current_badge_image);

current_item = [properties objectForKey:@"current_item"];

if([current_item isEqualToString:@"badge"]){
    NSLog(@"current item is equal to badge");
    [badgeImage setImage:[UIImage imageNamed:current_badge_image ]];
} else {
    if([current_item isEqualToString:@"group"]){
         NSLog(@"current item is equal to group");
        [badgeImage setImage:[UIImage imageNamed:current_group_image ]];    
    }
}

}

- (IBAction)changeButton:(id)sender {

    //switch image to group if it is a badge. switch image to badge if it is a group.

    if([[properties objectForKey:@"current_item"] isEqualToString:@"badge"]){
        NSLog(@"reaching badge");
        UIImage *imageToSet = [UIImage imageNamed:current_badge_image];
        [changeButtonOutlet setImage:imageToSet forState:UIControlStateNormal];
        [properties setObject:@"group" forKey:@"current_item"];
        [properties synchronize];
    } else {
        if([[properties objectForKey:@"current_item"] isEqualToString:@"group"]){
            NSLog(@"reaching group");
            UIImage *imageToSet = [UIImage imageNamed:current_group_image];
            [changeButtonOutlet setImage:imageToSet forState:UIControlStateNormal];
            [properties setObject:@"badge" forKey:@"current_item"];
            [properties synchronize];
        } 
    }

    [self switchBadgeImage];


}

実際にはいくつかの問題がありました。最初は、画像を間違った方法で切り替えていました。次に、UserDefaultsを同期していませんでした。また、現在のアイテムをUserDefaultsに保存した後、current_item変数を更新していませんでした。

すべての助けに感謝し、とても迅速に!

4

2 に答える 2

3
UIImage *image = [UIImage imageNamed:@"image.png"];
[changeButtonOutlet setImage:image forState:UIControlStateNormal];

これを試してみてください。私が知っているように、そのボタンの状態を設定する必要があります。このコードは画像とそのnotとbackgroundを設定します。他に何かあるかどうか教えてください。

于 2012-08-24T11:41:35.353 に答える
1

の画像を設定するには、その画像を使用する対象をUIButton指定する必要がありますUIControlState。このimageViewプロパティは、背景画像を設定するためのものではなく、に設定するためのものconfigure the appearance and behavior of the button’s viewです。

画像を設定する正しい方法は次のとおりです

[changeButtonOutlet setImage:imageToSet forState:UIControlStateNormal];

さまざまな制御状態とそのアプリケーションがここにリストされています。

于 2012-08-24T11:34:14.050 に答える