快速将参数传递给#selector方法[重复]

Posted

技术标签:

【中文标题】快速将参数传递给#selector方法[重复]【英文标题】:Passing arguments to #selector method in swift [duplicate] 【发布时间】:2016-07-12 12:30:21 【问题描述】:

我想在单击图像时将多个参数传递给函数。 这是我的代码

var param1 = 120
var param2 = "hello"
var param3 =  "world"

let image: UIImage = UIImage(named: "imageName")!
 bgImage = UIImageView(image: image)

let singleTap = UITapGestureRecognizer(target: self, action:#selector(WelcomeViewController.tapDetected(_:secondParam:thirdParam:)))
singleTap.numberOfTapsRequired = 1
bgImage!.userInteractionEnabled = true
bgImage!.addGestureRecognizer(singleTap)

调用函数

func tapDetected(firstParam: Int, secondParam: String, thirdParam: String) 
print("Single Tap on imageview")
            print(firstParam)  //print 120
            print(secondParam) // print hello
            print(thirdParam) /print world
        

如何传递参数以便获得正确的值?

【问题讨论】:

【参考方案1】:

你不能。来自文档:

手势识别器有一个或多个与之关联的目标-动作对。 ... 调用的操作方法必须符合以下签名之一:

- (void)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

您可以使用实例变量来传递参数。

【讨论】:

在我的特殊情况下如何使用实例变量? 这实际上与 Shadow Of 的回答中建议的相同。 好的,刚刚尝试了选项,子类 UIGestureRecognizer 并添加所需的属性。有效。类 MyTapGestureRecognizer:UITapGestureRecognizer var 标题:字符串? ***.com/questions/35635595/… 其实instance variables的意思是不继承UITapGestureRecognizer,而是在使用识别器的目标类中创建属性。【参考方案2】:

在 swift2 中,您不能在操作中传递参数。您可以只使用类属性:

var param1 = 120
var param2 = "hello"
var param3 = "world"
let image: UIImage = UIImage(named: "imageName")!
var bgImage: UIImageView?

override func viewDidLoad() 
    super.viewDidLoad()

    bgImage = UIImageView(image: image)
    let singleTap = UITapGestureRecognizer(target: self, action: #selector(WelcomeViewController.tapDetected))
    singleTap.numberOfTapsRequired = 1
    bgImage!.userInteractionEnabled = true
    bgImage!.addGestureRecognizer(singleTap)

调用函数

func tapDetected() 
    print("Single Tap on imageview")
    print(param1) // print 120
    print(param2) // print hello
    print(param3) // print world
 

【讨论】:

在此 URL 中,他们提到了与 swift 2.2 ***.com/questions/36166248/… 中的多个参数相关的内容 @Vinod 您可以使用任意数量/名称的参数定义 Selector,但我们需要 UITapGestureRecognizer 的能力来支持它们,使用一些指定的参数调用选择器,而 UITapGestureRecognizer 没有这个能力

以上是关于快速将参数传递给#selector方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给由 NSTimer 调用的方法

如何将多个参数传递给“scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:”中的选择器

将方法作为参数传递给另一个方法[重复]

如何在 addTarget #Selector 中将静态参数传递给 UIRefreshControl() 的本地函数

将参数传递给 Rake 任务中的方法 [重复]

C#将方法作为参数传递给另一个方法[重复]