传递参数时无法识别的选择器 - 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的主要内容,如果未能解决你的问题,请参考以下文章
-[UIViewController tableView:numberOfRowsInSection:]: 无法识别的选择器发送到实例
TableView 中的集合视图显示项目 [VGS.CustumCell collectionView:numberOfItemsInSection:]:发送到实例的无法识别的选择器
使用 UILocalizedIndexedCollation 在 Swift 4.2 中创建 tableView 部分索引时出现错误“无法识别的选择器发送到实例”