在IBAction中拥有(id)发件人是否有任何好处

时间:2011-06-29 05:39:11

标签: cocoa ibaction target-action

使用cocoa进行编码时,我注意到在定义sender时没有必要使用IBAction参数,因此采取以下措施:

- (IBAction)showUserInfo:(id)sender;

可以声明为

- (IBAction)showUserInfo;

所以我想知道除了发送动作的按钮/菜单项之外是否还有其他好处?只有我能想到的其他情况是几乎没有对象调用相同的IBAction。还有什么吗?

2 个答案:

答案 0 :(得分:2)

Doc说,

  

sender 参数通常标识发送操作消息的控件(尽管它可以是由实际发件人替换的另一个对象)。这背后的想法类似于明信片上的回邮地址。如果需要,目标可以向发件人查询更多信息。

sender 参数可以帮助您从中获取任何数据。例如,在UISegmentControl值上更改,如在@Mark Adams中回答。因此,如果您不想要发件人的任何信息,您可以省略它,就像在- (IBAction)showUserInfo;示例中一样。

答案 1 :(得分:1)

当您将方法连接到值可以更改并且您可能需要使用的UI对象时,使用sender参数会很方便。

例如,如果我将方法连接到UISegmentedControl并将其控制事件设置为UIControlEventValueChanged,我可以使用作为sender:参数传递的对象来获取它的选定段索引然后,基于在值上,在UI中进行更改。

-(IBAction)segmentedControlValueChanged:(id)sender
{
    UISegmentedControl *control = (UISegmentedControl *)sender;

    // Show or hide views depending on the selected index of the segmented control.
    if (control.selectedSegmentIndex == 0)
        someView.hidden = YES;
    else 
        someView.hidden = NO;
}