2016-07-12 10 views
5

में # चयनकर्ता विधि पर तर्क पास करना मैं एक छवि पर क्लिक करते समय एक फ़ंक्शन में एकाधिक तर्क पारित करना चाहता हूं। यहाँ मेरी कोडस्विफ्ट

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

स्विफ्ट 2 में आप क्रियाओं में पैरामीटर पास नहीं कर सकते हैं। तुम बस वर्ग गुणों का उपयोग हो सकता है:

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

इस यूआरएल में वे स्विफ्ट 2.2 में कई तर्कों से संबंधित कुछ का जिक्र कर रहे हैं http://stackoverflow.com/questions/36166248/understanding-swift-2-2-selector-syntax-selector – Vinod

+0

@ विनोद आप चयनकर्ता को परिभाषित कर सकते हैं तर्कों के किसी भी संख्या/नाम, लेकिन हमें कुछ निर्दिष्ट पैरामीटर के साथ चयनकर्ता को कॉल करने के लिए UITapGestureRecognizer क्षमता का समर्थन करने की आवश्यकता है, और UITapGestureRecognizer के पास यह क्षमता –

4

आप नहीं कर सकते हैं बुला। प्रलेखन से:

एक इशारा पहचानकर्ता के पास एक या अधिक लक्ष्य-क्रिया जोड़े शामिल हैं।
...
कार्रवाई तरीकों लागू निम्नलिखित हस्ताक्षर से एक का पालन करना चाहिए:

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

आप उदाहरण चर का उपयोग पैरामीटर पास करने के कर सकते हैं।

+0

नहीं है, मैं अपने विशेष मामले में आवृत्ति चर का उपयोग कैसे कर सकता हूं? – Vinod

+0

यह वास्तव में छाया के जवाब में सुझाए गए जैसा ही है। – vadian

+0

ठीक है, बस विकल्प का प्रयास किया, UIGestureRecognizer subclass और आवश्यक संपत्ति जोड़ें। इसने काम कर दिया। कक्षा MyTapGestureRecognizer: UITapGestureRecognizer { var शीर्षक: स्ट्रिंग? } http://stackoverflow.com/questions/35635595/sending-a-parameter-argument-to-function-through-uitapgesturerecognizer-selector – Vinod