使用带有两个参数的 UIButton addTarget 时无法识别的选择器

Posted

技术标签:

【中文标题】使用带有两个参数的 UIButton addTarget 时无法识别的选择器【英文标题】:Unrecognized selector when using UIButton addTarget with two parameters 【发布时间】:2012-11-14 00:18:17 【问题描述】:

当我试图链接到我的 UIButton 的方法只有一个参数时,我可以调用 addTarget 并且我的代码在单击按钮时成功运行 --

[ myDetailButton addTarget:self action:@selector(hideMap:) forControlEvents:UIControlEventTouchUpInside];

(void)hideMap:(NSMutableArray*)arguments

但是如果我在 hideMap 方法中添加第二个参数,调用它时会出现无法识别的选择器错误:

[ myDetailButton addTarget:self action:@selector(hideMap:) forControlEvents:UIControlEventTouchUpInside];

(void)hideMap:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options

无论我如何格式化 addTarget 参数,我都会看到这个错误,每个 this question --

action:@selector(hideMap)
action:@selector(hideMap:)
action:@selector(hideMap:event:)

如何使用 addTarget 调用具有多个参数的方法?

【问题讨论】:

【参考方案1】:

您的问题是您提供了一个选择器,该选择器期望 NSMutableArray 作为输入以及字典。 UIButton 不同意这一点。根据您链接到的帖子,UIBUtton 只同意发送任何内容、本身作为 id 或自身和事件。

我不能 100% 确定您希望如何从 UIButton 回调中获取 NSMutableArray 和 NSMutableDictionary,您究竟想在这里实现什么,我也许可以提供一些帮助。

【讨论】:

所以你是说我想要做的——调用一个有多个参数的方法——使用 UIButton 的 addTarget 是不可能的?那么最好的方法是添加一个中间方法来调用带有默认参数的操作方法吗? addTarget 中使用的选择器可以有 0、1 或 2 个参数。但是你不能选择参数。它们是固定的。发送者(按钮)总是第一个,事件总是第二个。请记住,当控制事件发生时,框架会调用您的方法。它无法知道传递一些你想要的任意数据。它只是说“事件发生了”以及由什么控制。然后,您必须使用它来调用您想要的任何其他方法以及您需要的任何其他参数。 +1 maddy,很好的回应。 @storm_m2138 添加中间方法是您想要的。例如按钮 -> 按钮回调 -> 你的自定义方法【参考方案2】:

问题是你的方法是:

-(void)hideMap:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options

并且方法名称是hideMap:withDict: 而不是hideMap:event:

将此代码 action:@selector(hideMap:event:) 更改为 action:@selector(hideMap:withDict:) 即可解决您的问题。

没有像hideMap:event: 这样的方法,这就是问题所在。

【讨论】:

以上是关于使用带有两个参数的 UIButton addTarget 时无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

在发件人中使用带有 UIButton 的标签属性并尝试强制转换 id -> UIButton

带有标题和图像的 UIButton

如何在不重叠的情况下在 UIButton 中实现两个 IBAction?

设备旋转时 TableView Cell 中显示的两个 uibutton

按下 UIButton 时带参数的触发功能

UIButton不在两个图像之间切换Swift 4.2