2016-02-17 7 views
8

में प्रोग्रामेटिक रूप से सबव्यूव के लिए UIGestureRecognizer जोड़ना मेरे पास वर्तमान में एक सबव्यूव है जिसे बनाया गया है और ViewDidLoad() में UIView में जोड़ा गया है। मैं यूआईजीएस्टर रिकॉग्नाइज़र को एक टैप का पता लगाने और किसी विशेष बटन को अनदेखा करने का प्रयास कर रहा हूं। मेरे वर्तमान कोड:स्विफ्ट

override func viewDidLoad() { 
    super.viewDidLoad() 
    architectView = CustomClass(frame: self.view.bounds) 
    self.view.addSubview(architectView)   
    let gestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
    gestureRecognizer.delegate = self 
    architectView.addGestureRecognizer(gestureRecognizer) 
} 

func handleTap(gestureRecognizer: UIGestureRecognizer) { 
    let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 
    self.presentViewController(alert, animated: true, completion: nil) 
} 

handleTap() फ़ंक्शन यदि नल मान्यता प्राप्त किया जा रहा है देखने के लिए एक साधारण परीक्षण है। यह कोड UIAlert को दबाए जाने पर ट्रिगर नहीं करता है? मैं क्या खो रहा हूँ?

+0

हां। मैंने अधिक स्पष्ट बनाने के लिए संपादित किया है –

+0

क्या आपने हैंडलटैप में ब्रेक पॉइंट डालने का प्रयास किया है: यह देखने के लिए कि फ़ंक्शन को भी कॉल किया जा रहा है या नहीं? –

+0

हाँ मैंने अभी कोशिश की। फ़ंक्शन को –

उत्तर

12

मैंने यहां आपके कोड का परीक्षण किया और यह काम करता है। हालांकि, मुझे लगता है कि आप अपने व्यू कंट्रोलर को UIGestureRecognizerDelegate प्रोटोकॉल जोड़ने के लिए अनुपलब्ध हो सकते हैं। नीचे देखें:

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

    var architectView = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     architectView = UIView(frame: self.view.bounds) 
     self.view.addSubview(architectView) 
     let gestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
     gestureRecognizer.delegate = self 
     architectView.addGestureRecognizer(gestureRecognizer) 
    } 

    func handleTap(gestureRecognizer: UIGestureRecognizer) { 
     let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
9

स्विफ्ट 3 संस्करण राफेल सिल्वा उत्तर के आधार पर कोड:

import UIKit 

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

    var architectView = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     architectView = UIView(frame: self.view.bounds) 
     self.view.addSubview(architectView) 
     let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(gestureRecognizer:))) 
     gestureRecognizer.delegate = self 
     architectView.addGestureRecognizer(gestureRecognizer) 
    } 

    func handleTap(gestureRecognizer: UIGestureRecognizer) { 
     let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert) 
     alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil)) 
     self.present(alert, animated: true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
+0

नहीं कहा जाता है ओह मेरी भलाई। धन्यवाद, मैंने मधुमक्खी का एकमात्र आधुनिक उत्तर के लिए दूर और व्यापक खोज की है जो काम करता है। क्यों दुनिया में ऐप्पल इतना बहिष्कार करता है। उनके अधिकांश बहिष्कार पूरी तरह से अनावश्यक लगते हैं और केवल भ्रम का कारण बनते हैं। –