0

UISwitch「OFF」から「ON」に変更した場合、aの背景画像UIButtonを変更したい。私は次のコードを持っています:

- (IBAction)switchValueChanged {
    if (Hard1ON.on) {
        UIImage *buttonImage = [UIImage imageNamed:@"red.jpg"];
        [Hard1 setImage:buttonImage forState:UIControlStateNormal];
        [self.view addSubview:Hard1];
        NSLog(@"Change");
    }
    else {
        UIImage *buttonImage = [UIImage imageNamed:@"white.jpg"];
        [Hard1 setImage:buttonImage forState:UIControlStateNormal];
        [self.view addSubview:Hard1];
    }
}

スイッチを押すと、コンソールは正しくログに記録されるので、それが機能していることがわかりますが、ボタンの背景は変わりません。

参考までに、Hard1ONは私のUISwitchHard1は私のUIButtonです。

4

3 に答える 3

4

ボタンを一度追加します。最も一般的な方法は、ボタンを追加してからviewDidLoad、切り替えを実行するときに画像を変更することです。

だから、viewDidLoadメソッド内

// create the button
[self.view addSubview:Hard1];

次に、値を変更した方法で

if (Hard1ON.on) {
    UIImage *buttonImage = [UIImage imageNamed:@"red.jpg"];
    [Hard1 setImage:buttonImage forState:UIControlStateNormal];
    NSLog(@"Change");
} else {
    UIImage *buttonImage = [UIImage imageNamed:@"white.jpg"];
    [Hard1 setImage:buttonImage forState:UIControlStateNormal];
}

変数の命名にはキャメルケース表記を使用してください。

たとえば、のHard1ようになりますhard1hard1Buttonとしてまたは同様の名前を付ける方がよいでしょう。同じことがスイッチ要素にも当てはまります。たとえば、hard1OnSwicth

編集

viewDidLoadプログラムでメソッドでボタンを作成しようと思います。

- (void)viewDidLoad
{ 
    [super viewDidLoad];

    self.hardButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.hardButton setFrame:CGRectMake(0, 0, 200, 50)]; // set the x,y,width and height based on your specs
    UIImage *buttonImage = [UIImage imageNamed:@"white.jpg"];
    [self.hardButton setImage:buttonImage forState:UIControlStateNormal];
    [self.view addSubview:self.hardButton];
}

ここで、hardButtonは、.hで宣言されたボタンへの参照です(たとえば)。

@property (nonatomic, assign) UIButton* hardButton;

このように合成します(必要に応じて、Xcodeが処理します)。

@synthesize hardButton = _hardButton;

割り当ての代わりにstrongまたはretainを使用し、のdeallocようにARCリリースを使用しない場合

- (void)dealloc
{ 
   [_hardButton release];
   [super dealloc];
}

今、あなたのスイッチの値が変更されました。

- (IBAction)switchValueChanged
{
    UIImage* buttonImage = nil;
    if (Hard1ON.on) {
        buttonImage = [UIImage imageNamed:@"red.jpg"];
    } else {
        buttonImage = [UIImage imageNamed:@"white.jpg"];
    }

    [self.hardButton setImage:buttonImage forState:UIControlStateNormal];
}
于 2013-02-24T12:07:38.730 に答える
0

-setBackgroundImage:forState:代わりに使いたいと思います-setImage:forState:

また、@ flexaddictedが言ったように、ボタンを追加したいのは1回だけです。

于 2013-02-24T12:07:30.273 に答える
0

ボタンをスイッチとして使用している場合は、このようにすることができます。

  _btnMale = [UIButton buttonWithType:UIButtonTypeCustom];
   [_btnMale setBackgroundImage:[ UIImage imageNamed:@"checkBox.png"] forState:UIControlStateNormal];
   [_btnMale setBackgroundImage:[ UIImage imageNamed:@"checkMark.png"] forState:UIControlStateSelected];
   _btnMale.tag = 1;
   _btnMale.frame = CGRectMake(150 , 9, 25, 25);
   [_btnMale addTarget:self action:@selector(selectGender:) forControlEvents:UIControlEventTouchUpInside];
   [self addSubview:_btnMale];

必要に応じて、viewDidLoad/viewDidAppearメソッドで選択された通常の状態のボタン画像を設定します。宣言後、ターゲットメソッドにこのコードを追加します。

-(void)selectGender:(UIButton*)sender{

  sender.selected = ! sender.selected;

}

次に、他のボタンを選択済みに設定しますNO。その後、ボタンはスイッチのように機能します。

これがお役に立てば幸いです。

于 2013-02-24T13:43:33.430 に答える