3

如果实际上并未从用户的操作中调用 IBAction,那么在使用 IBAction 时是否存在任何问题?

如果您有类似的操作

-(IBAction)sayHello:(id)sender;

您可以在课堂上调用它,例如:

[self sayHello:@"x"]

@"x" 不做任何事情,它只是为发送者填写。

您实际上可以在没有 (id)sender 的情况下创建 IBAction 方法

-(IBAction)sayHello;

并从用户的操作和代码中调用它,但是您不会从界面中获得任何有用的发件人信息。从代码调用时,为发件人填写的“正确”方式是什么?当从代码中调用它时,您可以创建发送者信息吗?

只是想弄清楚。

4

3 回答 3

6

我认为 OOP 的一个好做法是折射方法 -(IBAction)sayHello:(id)sender;

调用另一个方法:-(void)sayHello; 在方法内部 -(IBAction)sayHello:(id)sender { [self sayHello]; }

如果其他方法想要调用 sayHello:(id)sender 动作来做一些工作,它可以调用 sayHello。方法名称应该对客户端有意义地调用它而不会出现问题或变通。当您必须进行测试或调试时,它将为您提供帮助

于 2010-06-12T01:19:38.017 回答
3

发送者应该是一个 UI 组件。因此,如果在您的班级中,您有一个 UIButton ...

UIButton *button;

然后您可以将其作为参数发送给操作:

[self sayHello:button];

在方法内部,无论是从 UI 调用还是以某种模拟方式调用,您都可以有一些逻辑来检测发送者是谁,并据此做出不同的行为。这样,多个按钮或其他组件可以重用相同的操作方法。

于 2010-06-12T01:00:22.323 回答
2

除非您实际上正在使用该sender参数(有关更多信息,请参见 Jaanus 的答案),nil否则在从代码调用方法时传递它是可以的。

于 2010-06-12T01:03:49.217 回答