在我的新项目中,当我点击一个按钮时,它会从底部弹出一个菜单 View 。
和代码:
blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))
和 handleDismiss
函数:
@objc func handleDismiss(callback:(() -> ())?) {
UIView.animate(withDuration: 0.3, animations: {
self.blackView.alpha = 0
//......
}
}) { (completed: Bool) in
callback?()
}
}
然后我点击菜单 View 的 Cancel
单元格,使用 callback
参数调用 handleDismiss
函数。它正在工作。
if item.icon == "close" {
handleDismiss(callback: {
print("callback now")
})
}
但是如果我点击黑色 mask View (触发 action: #selector(handleDismiss))
),就会出现如下错误:
有人知道吗?
最佳答案
通过选择器
连接一个 Action 时,您必须匹配预期的方法签名。您的处理程序方法 handleDismiss
有一个闭包参数,它与 UITapGestureRecognizer
期望的不兼容;在这种情况下,这是一个单一的手势识别器参数,或者没有参数。所以你必须添加第二个方法作为点击事件监听器并将调用转发给关闭处理程序:
@objc func didTapDismiss() {
handleDismiss(callback: nil) // call your dismiss logic from the tap handler
}
您的解除处理程序代码可以保持原样(您可以删除不再需要的 @objc
):
func handleDismiss(callback:(() -> ())?) {
...
连接点击监听器时,使用新的点击处理程序操作:
blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(didTapDismiss)))
最后一点:我不知道你的确切用例,但你可能会通过使用点击手势识别器使事情变得过于复杂;您考虑过只使用 UIButton
吗?
关于ios - 没有参数的swift4选择器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48248472/