2011-09-10 16 views
28

इसलिए मेरे पास UIButton है, यह UIButtonTypeCustom है, और बटन लक्ष्य UIControlEventTouchUpInside के लिए कहा जाता है। मेरा सवाल यह है कि मैं कैसे निर्धारित कर सकता हूं कि UIButton में स्पर्श कब हुआ। मुझे यह जानकारी चाहिए ताकि मैं स्पर्श स्थान से पॉपअप प्रदर्शित कर सकूं। यहां मैंने कोशिश की है:UIButton TouchUpInside Touch स्थान

UITouch *theTouch = [touches anyObject]; 
CGPoint where = [theTouch locationInView:self]; 
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y); 

और कई अन्य पुनरावृत्तियों। बटन के लक्ष्य विधि sender के माध्यम से इसे से जानकारी प्राप्त: button.touchUpLocation:

UIButton *button = sender; 

तो वहाँ किसी भी तरह से मैं की तरह कुछ इस्तेमाल कर सकते हैं क्या है?

मैंने ऑनलाइन देखा और इस तरह से कुछ भी नहीं मिला, इसलिए अग्रिम धन्यवाद।

+0

कोई touchUpLocation है, UIButton एक नियंत्रण आप नहीं मिल सकता है UIButton का स्थान क्लिक करें। http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIButton_Class/UIButton/UIButton.html –

+1

मेरा मतलब शाब्दिक रूप से स्पर्श नहीं किया गया था, मेरा मतलब था कि – Andrew

+2

@ प्रवीण-के, यह गलत है । UIKit उन क्रियाओं का समर्थन करता है जो एक दूसरा पैरामीटर लेते हैं, UIEvent जो कार्रवाई को ट्रिगर करता है। उस से आप छूने की सूची प्राप्त कर सकते हैं, और प्रत्येक स्पर्श में एक स्थान होता है। नीचे पोस्ट कोड देखें। यह सच है कि UIButton में कोई विधि नहीं है जो अंतिम क्लिक का स्थान लौटाती है। – Caleb

उत्तर

56
UITouch *theTouch = [touches anyObject]; 
CGPoint where = [theTouch locationInView:self]; 
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y); 

सही विचार है यही कारण है, कि इस कोड, अपने दृश्य नियंत्रक में एक कार्रवाई के अंदर शायद है अधिकार को छोड़कर? यदि ऐसा है, तो self दृश्य नियंत्रक को संदर्भित करता है, बटन नहीं। आपको -locationInView: में बटन पर पॉइंटर पास करना चाहिए। स्विफ्ट 3.0 के लिए

- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event 
{ 
    UIView *button = (UIView *)sender; 
    UITouch *touch = [[event touchesForView:button] anyObject]; 
    CGPoint location = [touch locationInView:button]; 
    NSLog(@"Location in button: %f, %f", location.x, location.y); 
} 
+1

धन्यवाद कि मेरी समस्या पूरी तरह से हल हो गई। मैंने सोचा कि यह नहीं किया जा सका, तो यह बहुत अच्छा है। – Andrew

+1

कोड का एक बड़ा स्निपेट - कभी-कभी ये चीजें दिखाई देती हैं जो मानव प्रकृति में आपकी धारणा की पुष्टि करती हैं :-) – SomaMan

+0

'- (IBAction) बटन से ईवेंट प्राप्त करने का कोई तरीका है दबाया गया है: (आईडी) प्रेषक' ...? (यानी, मेरे पास एक बड़ी परियोजना है और मैं इसे सभी बटनों को बदलने के बिना बाधा डालना चाहता हूं ... के लिए: ', अगर मैं कर सकता हूं।) धन्यवाद! – Olie

0

क्या आपने अपने बटन पर एक इशारा पहचानकर्ता जोड़ने की कोशिश की?

+0

मैंने कोशिश नहीं की क्योंकि इशारा पहचानकर्ताओं के साथ मेरे पिछले अनुभवों में, वे सबव्यू के साथ काम नहीं करते हैं। मुझे यकीन है कि मैं कुछ गलत कर रहा था। लेकिन यह एक इशारा स्थिति की तरह प्रतीत नहीं हुआ था। यह जानना चाहता था कि बटन कब धक्का दिया गया था, ऐसा नहीं था जब कोई दृश्य टैप किया गया था। लेकिन आपके उत्तर – Andrew

+0

@ जीन-डेनिस मुइस के लिए धन्यवाद यह उत्तर एक टिप्पणी होना चाहिए, जब तक कि आप अपने सुझाव का विवरण नहीं दे रहे हों। साथ ही, मुझे लगता है कि इस मामले में अपरिवर्तित उत्तर अधिक उपयुक्त है, हालांकि एक इशारा पहचानकर्ता जोड़ना एक समाधान के रूप में होना चाहिए। सही तरीके से सेट अप करें, उन्हें एक ईवेंट का उपयोग करने के समान ही काम करना चाहिए। –

4

:

यहाँ एक परीक्षण किया कार्रवाई है कि आप अपने दृश्य नियंत्रक में की कोशिश कर सकते है

@IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) 
{ 
     let myButton:UIButton = sender as! UIButton 
     let touches: Set<UITouch>? = event.touches(for: myButton) 
     let touch: UITouch? = touches?.first 
     let touchPoint: CGPoint? = touch?.location(in: myButton) 
     print("touchPoint\(touchPoint)") 
}