दिलचस्प पोस्ट
एमएस ऑफ़िस का स्थापित संस्करण कैसे पता लगा सकता है? चयन सूची में सफ़ारी और आईई में पैडिंग काम नहीं कर रहा है psql: सर्वर से कनेक्ट नहीं हो सका: ऐसा कोई फ़ाइल या निर्देशिका (मैक ओएस एक्स) नहीं है ग्रहण के बाद मैं हमेशा एपीपी फाइल को फिर से स्थापित कर सकता हूं कैसे RecyclerView में आइटम के बीच डिवाइडर और रिक्त स्थान जोड़ने के लिए? कैसे यूटीएफ -8 तार की एक सरणी को सॉर्ट करने के लिए? मैं Word फ़ाइलों को पीडीएफ़ प्रोग्राम में परिवर्तित कैसे करूं? अगर ऑब्जेक्ट एक jQuery ऑब्जेक्ट है, तो जांचें वेक्टर <bool> एसटीएल कंटेनर क्यों नहीं है? कैसे आईओएस संस्करण की जांच करने के लिए? OnItemClickListener एंड्रॉइड के साथ सूची दृश्य एंड्रॉइड में इनबॉक्स को एसएमएस कैसे सहेजना है? जेएसपी पृष्ठ से ऑब्लेट पास करने के लिए ऑब्लेट पास करना एंड्रॉइड पर मैं मीडियास्टोर को कैसे रिफ्रेश कर सकता हूं? पायथन: एक सूची में वस्तुओं की गिनती करने के लिए एक शब्दकोश का उपयोग करना

आईओएस – एक दृश्य के माध्यम से सभी को छूते हैं

मेरे पास कई अन्य दृश्यों के ऊपर ओवरलेड दृश्य है। मैं केवल स्क्रीन पर कुछ संख्याओं को छूने के लिए ओवरली का उपयोग कर रहा हूं, लेकिन इसके अलावा मैं दृश्य को अन्य दृश्यों के व्यवहार को रोकना नहीं चाहता, जो कि स्क्रॉलएव्यू आदि हैं। मैं सभी छूओं को कैसे इस ओवरले दृश्य? यह UIView का एक उप-भाग है।

वेब के समाधान से एकत्रित समाधान "आईओएस – एक दृश्य के माध्यम से सभी को छूते हैं"

ओवरले दृश्य से नीचे के विचारों को स्पर्श करने के लिए, UIView में निम्नलिखित विधि को लागू करें:

उद्देश्य सी:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { NSLog(@"Passing all touches to the next view (if any), in the view stack."); return NO; } 

स्विफ्ट:

 override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { print("Passing all touches to the next view (if any), in the view stack.") return false } 
 myWebView.userInteractionEnabled = NO; 

मैं सभी की जरूरत थी!

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

 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { for (UIView* subview in self.subviews ) { if ( [subview hitTest:[self convertPoint:point toView:subview] withEvent:event] != nil ) { return YES; } } return NO; } 

@ फ्रेसिड्यू उत्तर का बेहतर संस्करण। आप इस UIView subclass का उपयोग अपने सेव्यूव्यू के बाहर पारदर्शी दृश्य गुज़रने के रूप में कर सकते हैं। उद्देश्य-सी में कार्यान्वयन:

 @interface PassthroughView : UIView @end @implementation PassthroughView - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { for (UIView *view in self.subviews) { if (!view.hidden && [view pointInside:[self convertPoint:point toView:view] withEvent:event]) { return YES; } } return NO; } @end 

और स्विफ्ट में:

 class PassthroughView: UIView { override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { return subviews.contains(where: { !$0.isHidden && $0.point(inside: point, with: event) }) } } 

यदि आप जिस दृश्य को छूना चाहते हैं वह सबव्यू / पर्यवेक्षण के रूप में नहीं होता है, तो आप अपने यूआईवीउव उपवर्ग में एक कस्टम संपत्ति सेट कर सकते हैं जैसे:

 @interface SomeViewSubclass : UIView { id forwardableTouchee; } @property (retain) id forwardableTouchee; 

सुनिश्चित करें कि इसे अपने। में संश्लेषित करें:

 @synthesize forwardableTouchee; 

और फिर अपने किसी भी UIResponder विधियों में निम्न शामिल करें जैसे:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.forwardableTouchee touchesBegan:touches withEvent:event]; } 

जहाँ भी आप अपने UIView को इन्स्तांत करते हैं, अग्रेषित करने योग्य टौचई संपत्ति को जो कुछ भी आप देखना चाहते हैं, उसमें ईवेंट को अग्रेषित करने के लिए सेट करें:

  SomeViewSubclass *view = [[[SomeViewSubclass alloc] initWithFrame:someRect] autorelease]; view.forwardableTouchee = someOtherView; 

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

यह एक शास्त्रीय मामला है जहां मेरे पास एक कंटेनर होता है जिसे पृष्ठभूमि में रखा जाना चाहिए, साथ ही किनारे के बटन भी। लेआउट प्रयोजनों के लिए, मैं UIStackView में बटन शामिल करता था, लेकिन अब स्टैकView इंटरसेप्ट्स का मध्य (रिक्त) हिस्सा स्पर्श करता है 🙁

मैंने जो किया है, वह सबव्यू परिभाषित करने वाली संपत्ति के साथ UIStackView का उपवर्ग बना है जो स्पर्श करने योग्य होना चाहिए। अब, किनारों के बटन (* दृश्यों के साथ-साथ- TouchTouch * सरणी में शामिल किए गए) के किसी भी स्पर्श बटन को दिए जाएंगे, जबकि इन दृश्यों के अलावा कहीं भी स्टैकिव्यू पर कोई भी स्पर्श नहीं किया जाएगा, और इसलिए जो भी स्टैक के नीचे है राय।

 /** Subclass of UIStackView that does not accept touches, except for specific subviews given in the viewsWithActiveTouch array */ class NoTouchStackView: UIStackView { var viewsWithActiveTouch: [UIView]? override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { if let activeViews = viewsWithActiveTouch { for view in activeViews { if CGRectContainsPoint(view.frame, point) { return view } } } return nil } } 

इस तरह से कुछ कोशिश करो …

 for (UIView *view in subviews) [view touchesBegan:touches withEvent:event]; 

उपरोक्त कोड, आपके छू में उदाहरण के लिए बैंगन पद्धति दृश्य के सभी उप-दृश्यों को स्पर्श करेगी।

जैसा कि @ पिक्सेल क्लाउडस्टव द्वारा सुझाया गया है यदि आप एक दृश्य से दूसरे को छूना चाहते हैं लेकिन इस प्रक्रिया पर कुछ अतिरिक्त नियंत्रण के साथ – उपवर्ग UIView

// हैडर

 @interface TouchView : UIView @property (assign, nonatomic) CGRect activeRect; @end 

// कार्यान्वयन

 #import "TouchView.h" @implementation TouchView #pragma mark - Ovverride - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { BOOL moveTouch = YES; if (CGRectContainsPoint(self.activeRect, point)) { moveTouch = NO; } return moveTouch; } @end 

इंटरफ़ेस के बाद बिल्डर ने केवल दृश्य दृश्य के लिए टच दृश्य दिखाया और अपने रीकंट के साथ सक्रिय रीसेट सेट कर दिया। इसके अलावा आप अन्य तर्क को बदल सकते हैं और लागू कर सकते हैं।