2016-07-12 3 views
5

Я хочу передать несколько аргументов функции при щелчке изображения. Вот мой кодПередача аргументов методу #selector в swift

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 
     } 

Как я могу передать аргументы, так что я могу получить правильные значения?

ответ

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 
} 
+0

В этом URL-адресе они упоминают что-то, связанное с несколькими аргументами в swift 2.2 http://stackoverflow.com/questions/36166248/understanding-swift-2-2-selector-syntax-selector – Vinod

+0

@Vinod Вы можете определить Selector with любое число/имена аргументов, но нам нужно, чтобы поддержка UITapGestureRecognizer поддерживала их, вызывать селектор с определенными параметрами, а UITapGestureRecognizer не имеет этой возможности. –

4

Вы не можете. Из документации:

Устройство распознавания жестов имеет одну или несколько связанных с ним пар целевых действий.
...
Способы действия, вызываемые должен соответствовать одному из следующих подписей:

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

Вы можете использовать переменный экземпляр для передачи параметров.

+0

Как использовать переменную экземпляра в моем конкретном случае? – Vinod

+0

Это практически то же самое, что и в ответе Shadow Of. – vadian

+0

Хорошо, просто попробовал вариант, подкласс UIGestureRecognizer и добавить требуемое свойство. Это сработало. класс MyTapGestureRecognizer: UITapGestureRecognizer { var headline: String? } http://stackoverflow.com/questions/35635595/sending-a-parameter-argument-to-function-through-uitapgesturerecognizer-selector – Vinod