6

ビューコントローラの下部に3つのボタンbtn1btn2btn3がありますが、要件に従ってタブバーを完全にカスタマイズすることはできないため、タブバーの代わりにそれらを使用しています。

ここで問題となるのは、btn1を押すと、通常の状態の画像ではなく、灰色の長方形に画像を変更したいということです。アウトレットのsetimageプロパティとuicontrolstateプロパティを使用して、ボタンbtn1Outletに対して宣言したアウトレットの両方の状態の画像を設定しました。

問題は、btn2またはbtn3のいずれかが押されるまでボタンを選択したままにできないことです。btn oneは、押されている間だけ選択された状態の画像に変わります。私がそれを離れると、通常の状態に戻ります。

他の2つのボタンのいずれかが押されるまで、btn1の画像を選択した画像として保持するにはどうすればよいですか?

4

3 に答える 3

4

「ハイライト」状態の画像を設定したので、押すと画像が表示されます。

あなたがしたいのは

1)SELECTED状態の画像を設定します

2)アシスタントビュー(ストーリーボード上、右上の2番目の正方形)を使用して、ビューコントローラーのプロパティを作成します(ボタンをヘッダーにドラッグするだけです)。

3)ボタンのアクションタイプのメソッド:

button.selected = !button.selected;

(明らかに、ボタンをプロパティに名前を付けたものに置き換えます)

于 2012-06-25T03:18:50.410 に答える
3

これが私がしたことです:

  1. 3つのボタンすべてを次のアクションメソッドにリンクします
  2. 3つのボタンすべての配列を作成します
  3. メソッドを呼び出したボタンを選択に設定します
  4. 他の2つのボタンを選択しないように設定します

    - (IBAction)buttonPressed:(id)sender
    {
        NSArray* buttons = [NSArray arrayWithObjects:btn1, btn2, btn3, nil];
        for (UIButton* button in buttons) {
            if (button == sender) {
                button.selected = YES;
            }
            else {
                button.selected = NO;
            }
        }
    }
    

お役に立てれば。

乾杯!

于 2013-07-04T05:20:05.083 に答える
1

ボタンを選択したままにするには、ボタンが呼び出すメソッドでsetSelected:YESを呼び出す必要があります。例えば:

- (void) methodThatYourButtonCalls: (id) sender {
        [self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0];


}

- (void) flipButton:(UIButton*) button {
    if(button.selected) 
        [button setSelected:NO];
    else
        [button setSelected:YES];

}

[sender setSelected:YES]を呼び出すだけでなく、performSelectorを呼び出すと少し奇妙に見えることはわかっていますが、前者は機能しますが、後者は機能しません。

別のボタンが押されたときにボタンの選択を解除するには、現在選択されているボタンへのポインターを保持するインスタンス変数を追加することをお勧めします。新しいボタンに触れたときに、flipButton:を呼び出して、それに応じて古いボタンの選択を解除できます。したがって、コードは次のようになります。

インターフェイスへのポインタを追加します

@interface YourViewController : UIViewController
{
    UIButton *currentlySelectedButton;
}

そしてこれらのメソッドを実装に

- (void) methodThatYourButtonCalls: (id) sender {
    UIButton *touchedButton = (UIButton*) sender;

    //select the touched button 
    [self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0]; 

    if(currentlySelectedButton != nil) { //check to see if a button is selected...
        [self flipButton:currentlySelectedButton];

    currentlySelectedButton = touchedButton;
}

- (void) flipButton:(UIButton*) button {
    if(button.selected) 
        [button setSelected:NO];
    else
        [button setSelected:YES];

}
于 2012-06-25T03:07:18.133 に答える