ios - (id)sender 在方法签名中作为目标操作模式中的选择器传递

标签 ios objective-c xcode ibaction

文档说明方法签名必须如下所示:

- (IBAction)doSomething:(id)sender;

但我可以使用其他签名来执行操作,例如:

- (IBAction)doSomething:(UIButton *)button; // could write sender instead of
                                            // button, but result is the same

它有效,但是

  • 如果我按住 cmd 并单击选择器,Xcode 不会重定向
  • 这违反了约定。

在方法签名中向发送者添加类型是一种不好的做法还有其他原因吗?

最佳答案

这两个语句都可以正常工作。

我怀疑 cmd+click 没有重定向您,因为您是 cmd+clicking 方法名称中的参数。单击参数时,cmd+click 不稳定。我建议您坚持单击方法名称,它应该可以正常工作。我发现如果您正在获取文档(选项 + 单击),同样的事情也适用。

同样,发件人可以比 id 更具体。如果您使用图形方法将按钮连接到您的代码,这实际上是一个选项:您可以选择 id 或 UIButton。

这里的参数名称“button”是无关紧要的。您可以将其命名为 MountKilimanjaro,因为该参数/变量名称是该方法的本地名称。

希望这对您有所帮助。

关于ios - (id)sender 在方法签名中作为目标操作模式中的选择器传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964299/

相关文章:

xcode - NSXMLParser 与 HTML 包含 Javascript 和 "bad"字符

ios - 一个 UITableViewCell 正在控制其他

ios - 如何通过 Instagram 的 API 获取用户图像

iphone - 将 CGPDFPageRef 转换为整数

ios - H.264:VTDecompressionSessionDecodeFrame失败,代码为12909

objective-c - [selfdismissModalViewControllerAnimated :YES]; 后如何调用 viewDidLoad

ios - Apple Mach-O 链接器错误解析

iphone - 不确定如何在 Objective-c 中添加两个 MD5 哈希值

objective-c - 如何以编程方式区分 MacBook 和 Mac 桌面?

objective-c - 在 Objective C (Xcode) 中比较两个字符串时如何使用 "If"语句?