0

ボタン用に 2 つの画像があり、1 つは通常用、もう 1 つは選択用です。そして、丸みを帯びた四角形のボタンがタッチダウンしたときと同じように動作するようにしたいのですが、ボタンの画像が変わり、外側にドラッグすると画像が通常に戻ります。これが私が試したものです。

まず、カスタム ビュー コントローラーを作成し、実装にメソッドを追加しました。これが下に表示されています。そして、これらのメソッドを再生「ボタン」と「設定」ボタンの 2 つのボタンに接続しました。

- (IBAction)playButtonSelected:(UIButton *)sender {  //this is for event touchDown
       [sender setImage:[UIImage imageNamed:@"PlayButtonSelected.png"] forState:UIControlStateNormal];

}


- (IBAction)playButtonNotSelected:(id)sender { //this is for event touchUpOutside
    [sender setImage:[UIImage imageNamed:@"PlayButton.png"] forState:UIControlStateNormal];

}



- (IBAction)settingsButtonSelected:(UIButton *)sender { //this is for event TouchDown
        [sender setImage:[UIImage imageNamed:@"SettingsButtonSelected.png"] forState:UIControlStateNormal];
}

- (IBAction)settingsButtonNotSelected:(id)sender { //this is for event touchUpOutside
      [sender setImage:[UIImage imageNamed:@"SettingsButtons.png"] forState:UIControlStateNormal];
}

さて、私はこれを行い、かなりうまくいきましたが、2つの問題があります.

1 つ目: 20 個のボタンがある場合、40 個のメソッドが必要です。これは実際には問題ではありませんが、潜在的な問題として考える必要があると思います。

2番目: ボタンを外側にドラッグすると、ユーザーが実際に指を離す前に、通常の画像に切り替えたいと思います。現時点では、イメージは指が離されたときにのみデフォルトになり、指が特定の距離に移動したときではなく、 touchUpInside コマンドが実行されません。基本的にこれが標準なので、これが欲しいです。また、ボタンをクリックするという衝動的な行動は、必要に応じて元に戻すことができることをユーザーが理解するのにも役立ちます。

かっこいい、どんな助けも大いに役立つでしょう!

4

2 に答える 2

4

選択した画像と通常の画像を一度だけ設定する必要があります (たとえば、ボタンを作成するとき)。

「状態」引数を使用すると、状態ごとに異なる画像を設定できます。このコードを書く必要があるのは 1 回だけです。

[playerButton setImage:[UIImage imageNamed:@"PlayButton.png"] forState:UIControlStateNormal];
[playerButton setImage:[UIImage imageNamed:@"PlayButtonSelected.png"] forState:UIControlStateSelected];

編集: 属性インスペクターの Interface Builder からこれを行うこともできます

通常状態 選択された状態

于 2012-08-05T02:03:42.757 に答える
2

第2部が回答されたので、第1部に回答します。

プログラムでボタンを作成していると仮定すると、各ボタンにタグ番号を割り当て、すべてのボタンに同じセレクターメソッドを設定できます。セレクターメソッドでタグ番号を識別することにより、押されたボタンを区別できます。これに似ています:stackoverflow.com/a/11756445/1479411

Interface Builderを使用している場合は、すべてのボタンを同じIBActionメソッドに接続し、各ボタンの属性インスペクターにタグ番号を手動で配置できます。ここでも、IBActionメソッドのタグ番号で区別できます。

追記として、ボタンが完全に異なる機能を果たしている場合は、#defineを使用してボタンを識別します。これにより、後でコーディングする際のミスが減ります。

#define SETTINGS  1
#define PLAY      2
#define FUNCTION1 3
#define FUNCTION2 4
...
于 2012-08-05T02:17:58.767 に答える