プログラムで IBAction にアクセスしており、この IBAction 呼び出しで 2 つのパラメーターを渡したいと考えています。誰でも簡単な方法を提案できますか...
4 に答える
IBActions は通常、ユーザー インターフェイス要素によって呼び出され、任意の数のパラメーターを持つことはできません。
プログラムでアクション メソッドを呼び出したい場合は、次のように、引数として辞書を渡し、渡したい実際の引数を保持することで、sender パラメーターを悪用する可能性があります。
- (void) foo
{
[self myAction: [NSDictionary dictionaryWithObject: @"bar" forKey: @"baz"]];
}
ただし、2 つのパラメーターを持つ追加のメソッドを作成することをお勧めします。IBAction は、送信者に適した引数を使用して呼び出すことができ、必要な引数を使用してプログラムで呼び出すことができます。これは、コードの可能なアウトラインになります。
// The atual "logic" method, doing sth interesting
- (void) foo: (NSString *) s bar: (NSInteger) i
{
// some code
}
- (IBAction) myAction: (id) sender
{
// can be invoked by a button, or any view action
if (sender == self.buttonX) {
[self foo: @"x" bar: 42];
}
if (sender == self.buttonY) {
[self foo: @"y" bar: 4];
}
}
- (void) methodCallingFooBarProgrammatically
{
[self foo: @"s" bar: 17];
}
次のように IBAction メソッドに配列を渡すことができます。
-(IBAction)method:(id)sender
{
[sender objectAtIndex:0];
}
または、次のようにすることもできます。
-(IBAction)methodName:(NSString *)stringName:(NSString*)stringName2
{
// You can pass an array and even a dictionary
}
IBAction メソッドは特定のパターンに従います。
- (IBAction)action:(id)sender;
また
- (IBAction)action:(id)sender forEvent:(UIEvent *)event;
ここで、senderはイベントを送信する UI オブジェクトであり、eventはUIEvent自体です。
これらの引数を送信しない場合、IBAction メソッドは必要ありません。必要な 2 つの引数を取る通常のメソッドを定義し、IBAction メソッドがそれを呼び出す必要がある場合は、それを実行します。IBAction メソッドは IBAction として定義されるため、インターフェイス ビルダーはコード内でそれらを見つけることができます。そのため、上記のパターンに従わない IBAction メソッドを定義する理由はありません。
IBAction メソッドは、sender オブジェクトとtouch イベントに関する 2 つのパラメーターを受け取ることができます。何も「渡す」ことはできません。次の方法でこれらのみを受け取ることができます。
- (IBAction)action
- (IBAction)action:(id)sender
- (IBAction)action:(id)sender forEvent:(UIEvent *)event
送信者のtag
プロパティのみを使用して、カスタム識別子を として渡すことができますNSInteger
。
ここがポイントです
「渡したい」他のすべてのものは、すでにモデルレイヤーに存在している必要があります! あなたがそれが何であるかを知っていれば...
したがって、アクションを受け取った後、モデルレイヤーからデータにアクセスできます。