Ios 单击ImageView并在Swift/Xcode中执行不带选择器的函数
我有一个带单元格的桌面视图。每个单元格都有一个imageView。当我点击imageView时,我想用传入的参数执行一个函数。 我知道如何使用单击ImageView的唯一方法如下:Ios 单击ImageView并在Swift/Xcode中执行不带选择器的函数,ios,swift,uibutton,uiimageview,selector,Ios,Swift,Uibutton,Uiimageview,Selector,我有一个带单元格的桌面视图。每个单元格都有一个imageView。当我点击imageView时,我想用传入的参数执行一个函数。 我知道如何使用单击ImageView的唯一方法如下: let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber)) cell.imageView.addGestureRecognizer(gestureRecognizer) @objc func
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber))
cell.imageView.addGestureRecognizer(gestureRecognizer)
@objc func printNumber(){
print("4")
}
现在,想象同样的事情,但是我想把要打印的数字传递到函数中
我看到过无数不同的帖子,都是关于如何将参数传递给选择器的,所以我不知道在这种情况下该怎么办
我想做这样的事情(我知道你做不到)
我需要这样做,因为每个按钮在按下时都会有不同的输出,这取决于单元格中的其他变量。您不需要输入数字。假设识别器位于图像视图上,则您可以:
extension UIResponder {
func firstParent<Responder: UIResponder>(ofType type: Responder.Type ) -> Responder? {
next as? Responder ?? next.flatMap { $0.firstParent(ofType: type) }
}
}
仅当仍要使用
#选择器
时,才使用accessibilityIdentifier属性,以便UIgestureRecognitizer可以读取值对象的值
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)
}
}
嗯,谢谢,我想我明白你的意思了,你能写一个像我举的例子一样的例子,打印出按下按钮的单元格的索引路径号吗?你在找这个吗?哦,该死的,事实上可能就是这样,我回家后会检查的,谢谢你,伙计!
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
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)
}
}