单击 ImageView 并在 Swift/Xcode 中执行没有选择器的函数
Posted
技术标签:
【中文标题】单击 ImageView 并在 Swift/Xcode 中执行没有选择器的函数【英文标题】:Click on ImageView and execute function WITHOUT selectors in Swift/Xcode 【发布时间】:2020-01-06 23:24:05 【问题描述】:我有一个带有单元格的 tableView。每个单元格都有一个 imageView。当我点击 imageView 时,我想用我传入的参数执行一个函数。 我知道如何点击 imageViews 的唯一方法是这样的:
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber))
cell.imageView.addGestureRecognizer(gestureRecognizer)
@objc func printNumber()
print("4")
现在,想象一下完全相同的事情,但我想将要打印的数字传递到函数中 我已经看过一百万篇关于如何无法将参数传递给选择器的不同帖子,所以我不确定在这种情况下该怎么做。
我想做这样的事情(我知道你不能这样做)
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber(num: 4))
cell.imageView.addGestureRecognizer(gestureRecognizer)
@objc func printNumber(String: num)
print(num)
我需要这样做,因为每个按钮在按下时都会有不同的输出,具体取决于单元格中的其他一些变量。
【问题讨论】:
你在找这个吗? ***.com/questions/38445262/… 该死的,可能是它,我回家后检查一下,谢谢伙计! 【参考方案1】:您无需输入号码。假设识别器在图像视图上,您:
-
获取gestures.view(这是图像视图)
沿着响应者链查找父 tableview 单元格和 table view
向 tableview 询问 tableview 单元格的索引路径(这基本上就是你要传入的他的编号)
使用号码调用您的函数
至于一般地沿着响应者链向上走:
extension UIResponder
func firstParent<Responder: UIResponder>(ofType type: Responder.Type ) -> Responder?
next as? Responder ?? next.flatMap $0.firstParent(ofType: type)
所以你的代码是:
guard let cell = recognizer.view?.firstParent(ofType: UITableViewCell.self),
let tableView = recognizer.view?.firstParent(ofType: UITableView.self),
let indexPath = tableview.indexPath(for: cell) else
return
// Do stuff with indexPath here
【讨论】:
嗯,谢谢你,我想我明白你在说什么了,你能写一个像我给出的例子一样的例子,打印出按下按钮的单元格的索引路径号吗?【参考方案2】:使用 accessibilityIdentifier 属性,仅当您仍想使用#selector
,以便UIGestureRecognizer
可以读取值对象的值。 p>
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! YourTableViewCell
…
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber))
cell.imageView.accessibilityValue = String(4)
cell. imageView.isUserInteractionEnabled = true
cell.imageView.addGestureRecognizer(gestureRecognizer)
…
return cell
@objc func printNumber(sender: UITapGestureRecognizer)
if let id = sender.view?.accessibilityIdentifier
print(tag)
【讨论】:
以上是关于单击 ImageView 并在 Swift/Xcode 中执行没有选择器的函数的主要内容,如果未能解决你的问题,请参考以下文章
如果为空,则显示 imageview onclick 并在没有 imageview 的情况下发布
如何缩放 + 裁剪图像并在 imageview 上显示裁剪的图像