私のプロジェクトでは、40個のボタンのアクションを制御する必要がありますが、40個のIBActionを作成したくないのですが、IBActionのみを使用できますか?
7 に答える
Interface Builderを使用してボタンを作成している場合は、関連するクラスの同じIBActionにボタンを向けるだけです。
次に、ボタンからテキストを読み取ることにより、IBActionメソッド内のボタンを区別できます...
- (IBAction)buttonClicked:(id)sender {
NSLog(@"Button pressed: %@", [sender currentTitle]);
}
...またはtagXcodeでプロパティを設定し、を介してそれを読み戻すことによって[sender tag]。(このアプローチを使用する場合は、タグを1から開始します。これは、0がデフォルトであり、ほとんど使用されないためです。)
-(IBAction)myButtonAction:(id)sender {
if ([sender tag] == 0) {
// do something here
}
if ([sender tag] == 1) {
// Do something here
}
}
// in Other words
-(IBAction)myButtonAction:(id)sender {
switch ([sender tag]) {
case 0:
// Do something here
break;
case 1:
// Do something here
break;
default:
NSLog(@"Default Message here");
break;
}
その1つのアクションを使用するようにすべてのボタンを設定します。アクションには通常sender、どのボタンがアクションを呼び出しているかを把握するために使用できるパラメーターがあります。ボタンの違いを区別する一般的な方法の1つは、各ボタンのtagプロパティに異なる値を割り当てることです。したがって、1〜40の範囲のタグを持つ40個のボタンがある可能性があります(0はデフォルト値であるため、タグにはおそらく適切な選択ではありません。タグの設定を忘れたボタンには、0が付けられます。タグ値。)
この手法は、電卓やキーボードのボタンのように、すべてのボタンがほぼ同じことを行う場合に最も役立ちます。各ボタンが完全に異なることを行う場合でも、40のメソッドに相当するものになりますが、Objective-Cのメッセージングシステムの代わりに独自のswitchステートメントを使用します。その場合、適切に割り当てるために必要な数のアクションを作成するために時間を費やす方がよい場合がよくあります。
もちろん。InterfaceBuilderの同じアクションメソッドにすべてのボタンを接続するだけです。メソッドのsender引数を(おそらくボタンのプロパティと組み合わせてtag)使用して、どのボタンがイベントを送信しているかを識別します。
1つのIBActionを使用して、それをすべてのボタンに割り当てるだけです。
上記の方法を自分で使用し、ボタンを選択しましたが、それらをすべて変換し、代わりにスイッチケースを使用しました
-(IBAction)buttons:(id)sender
{
switch ([sender tag])
{
case 0 :
}
}