传递参数时无法识别的选择器 - TableView 单元格中的 UIButton |斯威夫特 iOS

Posted

技术标签:

【中文标题】传递参数时无法识别的选择器 - TableView 单元格中的 UIButton |斯威夫特 iOS【英文标题】:Unrecognized Selector when Passing Parameter - UIButton in TableView Cell | Swift iOS 【发布时间】:2016-10-11 15:17:37 【问题描述】:

我以前遇到过这个问题,但通常是由于 Storyboard 中没有连接按钮或在函数需要一个参数时没有传递参数,就像这里的大多数现有问题似乎暗示的那样。然而,这一次都不是这些东西。

我正在使用CellForRowAt 方法中的代码在我的 TableView 单元格中创建一个按钮:

let button = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
button.addTarget(self, action: Selector(("showPeople:")), for: UIControlEvents.touchUpInside)
button.tag = indexPath.row
cell.addSubview(button)

我已经像这样声明了showPeople 方法:

func showPeople(sender: UIButton) 
    print("pressed")

按下按钮时,程序崩溃并显示以下消息:

showPeople: unrecognized selector sent to instance

但是当我这样声明方法时(去掉参数):

func showPeople() 
    print("pressed")

并将选择器更改为Selector(("showPeople")) 它工作正常,我猜这意味着我传递参数的方式存在问题。为什么会发生这种情况?该函数需要一个参数,因此需要:

【问题讨论】:

【参考方案1】:

您的选择器中似乎缺少 sender 部分。

试试这个:

button.addTarget(self, action: #selector(ViewController.showPeople(sender:)), for: .touchUpInside)

【讨论】:

这是因为在 Swift 2 中,第一个参数名称没有用于外部签名。因此,要在 Swift 2 中调用相同的 showPeople(sender: UIButton) 方法,您正在执行 showPeople(button),而在 Swift 3 中,您必须调用 showPeople(sender: button)。 要省略参数名称,您必须在方法实现中添加下划线,如下所示:func showPeople(_ sender: UIButton)

以上是关于传递参数时无法识别的选择器 - TableView 单元格中的 UIButton |斯威夫特 iOS的主要内容,如果未能解决你的问题,请参考以下文章

UITableView,无法识别的选择器发送到实例

-[UIViewController tableView:numberOfRowsInSection:]: 无法识别的选择器发送到实例

TableView 中的集合视图显示项目 [VGS.CustumCell collectionView:numberOfItemsInSection:]:发送到实例的无法识别的选择器

当核心数据中找不到相关实体时,无法识别的选择器发送到实例

使用 UILocalizedIndexedCollat​​ion 在 Swift 4.2 中创建 tableView 部分索引时出现错误“无法识别的选择器发送到实例”

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