1

プログラムで IBAction にアクセスしており、この IBAction 呼び出しで 2 つのパラメーターを渡したいと考えています。誰でも簡単な方法を提案できますか...

4

4 に答える 4

5

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];
}
于 2012-08-22T08:05:02.490 に答える
0

次のように IBAction メソッドに配列を渡すことができます。

-(IBAction)method:(id)sender
{
   [sender objectAtIndex:0];
}

または、次のようにすることもできます。

-(IBAction)methodName:(NSString *)stringName:(NSString*)stringName2
{
  // You can pass an array and even a dictionary
}
于 2012-08-22T08:06:44.690 に答える
0

IBAction メソッドは特定のパターンに従います。

- (IBAction)action:(id)sender;

また

- (IBAction)action:(id)sender forEvent:(UIEvent *)event;

ここで、senderはイベントを送信する UI オブジェクトであり、eventUIEvent自体です。

これらの引数を送信しない場合、IBAction メソッドは必要ありません。必要な 2 つの引数を取る通常のメソッドを定義し、IBAction メソッドがそれを呼び出す必要がある場合は、それを実行します。IBAction メソッドは IBAction として定義されるため、インターフェイス ビルダーはコード内でそれらを見つけることができます。そのため、上記のパターンに従わない IBAction メソッドを定義する理由はありません。

于 2012-08-22T08:27:07.803 に答える
-1

IBAction メソッドは、sender オブジェクトtouch イベントに関する 2 つのパラメーターを受け取ることができます。何も「渡す」ことはできません。次の方法でこれらのみを受け取ることができます。

- (IBAction)action
- (IBAction)action:(id)sender
- (IBAction)action:(id)sender forEvent:(UIEvent *)event

送信者のtagプロパティのみを使用して、カスタム識別子を として渡すことができますNSInteger


ここがポイントです

「渡したい」他のすべてのものは、すでにモデルレイヤーに存在している必要があります! あなたがそれが何であるかを知っていれば...

したがって、アクションを受け取った後、モデルレイヤーからデータにアクセスできます。

于 2012-08-22T08:34:26.817 に答える