如何在IBAction中传递参数?

时间:2012-08-22 08:00:13

标签: iphone objective-c cocoa ibaction

我以编程方式访问IBAction&想要通过此IBAction调用传递两个参数。 任何人都可以提出简单的方法......

4 个答案:

答案 0 :(得分:5)

IBActions通常由用户界面元素调用,并且它们不能具有任意数量的参数。

如果要以编程方式调用action方法,可以通过将字典作为参数传递来滥用sender参数,并保存要传递的实际参数,如下所示:

- (void) foo
{
    [self myAction: [NSDictionary dictionaryWithObject: @"bar" forKey: @"baz"]];
}

但是,我建议使用两个参数创建一个额外的方法; 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];
}

答案 1 :(得分:0)

您可以在IBAction方法中传递数组,如下所示:

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

或者你可以这样做:

-(IBAction)methodName:(NSString *)stringName:(NSString*)stringName2
{
  // You can pass an array and even a dictionary
}

答案 2 :(得分:0)

IBAction方法遵循特定模式

- (IBAction)action:(id)sender;

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

其中 sender 是发送事件的UI对象,而 event UIEvent 本身。

如果您没有发送这些参数,那么您不需要IBAction方法。定义一个采用你想要的两个参数的普通方法,如果你的IBAction方法也需要调用它,那么就这样做。 IBAction方法被定义为IBAction,因此接口构建器可以在您的代码中找到它们,因此没有理由定义不遵循上述模式的IBAction方法。

答案 3 :(得分:-1)

IBAction方法可以接收关于发送者对象触摸事件的两个参数,你不能“传递”任何东西,你 只能通过以下方式接收这些:

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

您只能使用发件人的tag媒体资源将自定义标识符作为NSInteger传递。


这里是要点

您希望“传递”的所有内容必须已存在于模型图层上,如果您知道它是什么......

因此,您可以在收到操作后从模型图层访问您的数据。