gpt4 book ai didi

ios - 没有参数的swift4选择器函数

转载 作者:搜寻专家 更新时间:2023-10-31 08:21:58 25 4
gpt4 key购买 nike

在我的新项目中,当我点击一个按钮时,它会从底部弹出一个菜单 View 。

enter image description here

和代码:

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))),就会出现如下错误:

enter image description here

有人知道吗?

最佳答案

通过选择器 连接一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com