2016-07-12 44 views
5

Voglio passare più argomenti a una funzione mentre faccio clic su un'immagine. Ecco il mio codicePassare argomenti al metodo #selector in 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) 

chiamando la funzione

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 
     } 

Come posso passare gli argomenti in modo che posso ottenere valori corretti?

risposta

2

In swift2 non è possibile passare i parametri nelle azioni. Si può solo utilizzare le proprietà di classe:

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) 
} 

funzione

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

in questo URL menzionano qualcosa relativo a più argomenti in swift 2.2 http://stackoverflow.com/questions/36166248/understanding-swift-2-2-selector-syntax-selector – Vinod

+0

@Vinod È possibile definire il selettore con qualsiasi numero/nome di argomenti, ma abbiamo bisogno dell'abilità di UITapGestureRecognizer per supportarli, per chiamare il selettore con alcuni parametri specificati e UITapGestureRecognizer non ha questa capacità –

4

Non si può chiamare. Dalla documentazione:

Un riconoscitore di gesti ha una o più coppie di azioni di destinazione ad esso associate.
...
I metodi d'azione richiamata deve essere conforme ad uno dei seguenti identificativi:

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

Si può utilizzare variabili di istanza di passare i parametri.

+0

Come posso utilizzare la variabile di istanza nel mio caso particolare? – Vinod

+0

È praticamente lo stesso suggerito nella risposta di Shadow Of. – vadian

+0

Ok, ho appena provato l'opzione, sottoclassi UIGestureRecognizer e aggiungi la proprietà richiesta. Ha funzionato. classe MyTapGestureRecognizer: UITapGestureRecognizer { var headline: String? } http://stackoverflow.com/questions/35635595/sending-a-parameter-argument-to-function-through-uitapgesturerecognizer-selector – Vinod