1

我正在以编程方式访问 IBAction 并希望通过此 IBAction 调用传递两个参数。任何人都可以建议简单的方法...

4

4 回答 4

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

IBAction 方法也遵循特定的模式

- (IBAction)action:(id)sender;

或者

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

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

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

于 2012-08-22T08:27:07.803 回答
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 回答
-1

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

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

您可以仅使用发件人的tag属性将自定义标识符作为NSInteger.


这是重点

您想要“传递”的所有其他内容必须已经存在于您的模型层上!如果你知道它是什么...

因此,您可以在收到操作后从模型层获取数据。

于 2012-08-22T08:34:26.817 回答