使用 cocoa 编码时,我注意到定义时不需要sender
参数IBAction
,因此执行以下操作:
- (IBAction)showUserInfo:(id)sender;
可以声明为
- (IBAction)showUserInfo;
所以我想知道除了拥有发送操作的按钮/菜单项之外是否还有其他好处?我能想到的唯一其他情况是很少有对象调用相同的 IBAction。还要别的吗?
使用 cocoa 编码时,我注意到定义时不需要sender
参数IBAction
,因此执行以下操作:
- (IBAction)showUserInfo:(id)sender;
可以声明为
- (IBAction)showUserInfo;
所以我想知道除了拥有发送操作的按钮/菜单项之外是否还有其他好处?我能想到的唯一其他情况是很少有对象调用相同的 IBAction。还要别的吗?
医生说,
sender参数通常标识发送操作消息的控件(尽管它可以是由实际发送者替代的另一个对象)。这背后的想法类似于明信片上的寄信人地址。如果需要,目标可以向发送者查询更多信息。
如果您想从中获取任何数据,则sender参数会有所帮助。例如,在 UISegmentControl 值更改时,如@Mark Adams 的回答。因此,如果您不希望发件人提供任何信息,则可以省略它,如您的- (IBAction)showUserInfo;
示例所示。
sender
当您将该方法连接到其值可以更改并且您可能需要使用的 UI 对象时,使用该参数会很方便。
例如,如果我将一个方法连接到 aUISegmentedControl
并将其控制事件设置为 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;
}