使用IBAction时,如果没有实际从用户的操作中调用它,是否有任何问题?
如果你有像
这样的动作-(IBAction)sayHello:(id)sender;
您可以在班级内拨打电话,如:
[self sayHello:@"x"]
@“x”没有做任何事情,它只是为发件人填写。
您实际上可以创建没有(id)发件人
的IBAction方法-(IBAction)sayHello;
并从用户的操作和代码中调用它,但之后您将无法从界面获得任何有用的发件人信息。从代码中调用时,为发件人填写的“正确”方法是什么?你可以创建发件人信息,以便在代码中调用时发送吗?
试着想出来。
答案 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
。