当没有从动作调用时使用IBAction方法?

时间:2010-06-12 00:57:15

标签: iphone objective-c methods ibaction

使用IBAction时,如果没有实际从用户的操作中调用它,是否有任何问题?

如果你有像

这样的动作
-(IBAction)sayHello:(id)sender;

您可以在班级内拨打电话,如:

[self sayHello:@"x"]

@“x”没有做任何事情,它只是为发件人填写。

您实际上可以创建没有(id)发件人

的IBAction方法
-(IBAction)sayHello;

并从用户的操作和代码中调用它,但之后您将无法从界面获得任何有用的发件人信息。从代码中调用时,为发件人填写的“正确”方法是什么?你可以创建发件人信息,以便在代码中调用时发送吗?

试着想出来。

3 个答案:

答案 0 :(得分:6)

我认为OOP的一个好习惯是折射方法 - (IBAction为)的sayHello:(ID)发送者;

另一个叫做的方法: - (void)sayHello; 并在方法内部 - (IBAction)sayHello:(id)sender {   [self sayHello]; }

如果其他方法想要调用sayHello:(id)发送者动作来完成某项工作,则可以调用sayHello。方法名称应该有意义,客户端可以毫无问题地调用它或解决它。当您需要测试或调试时,它会对您有所帮助

答案 1 :(得分:3)

发件人应该是UI组件。所以如果在你的课堂上你有一个UIButton ......

UIButton *button;

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

[self sayHello:button];

该方法内幕,无论是从UI调用还是以某种模拟方式调用,您都可以使用一些逻辑来检测发件人是谁,并根据这种情况采取不同的行为。这样,多个按钮或其他组件可以重用相同的操作方法。

答案 2 :(得分:2)

除非您实际使用sender参数(请参阅Jaanus的答案以获取更多相关信息),否则从代码调用方法时可以传递nil