我以编程方式访问IBAction&想要通过此IBAction调用传递两个参数。 任何人都可以提出简单的方法......
答案 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
传递。
您希望“传递”的所有内容必须已存在于模型图层上,如果您知道它是什么......
因此,您可以在收到操作后从模型图层访问您的数据。