2011-05-28 10 views
17

मेरे पास दृश्य पदानुक्रम में एक यादृच्छिक बाल दृश्य है। रूट पर्यवेक्षक को पाने के लिए सबसे अच्छा/तेज़/क्लीव्रेस्ट तरीका क्या है?UIView। मैं रूट सुपरव्यू फास्ट कैसे ढूंढूं?

चीयर्स,
डौग

उत्तर

24

अपने app केवल एक UIWindow (आमतौर पर सही) है, और अगर उस खिड़की के केवल subview अपने जड़ नियंत्रक के दृश्य (भी आम तौर पर सच है) है:

[randomChildView.window.subviews objectAtIndex:0]

या आप view.superview की जांच करके पदानुक्रम से बाहर चढ़ सकते हैं, जब तक कि आपको कोई ऐसा दृश्य न मिले, जिसका पर्यवेक्षण nil है।

+0

मुझे यह पसंद है। चीयर्स। – dugla

+2

आप दोबारा जांचना चाहेंगे कि आपको कभी भी यह पता चल जाएगा कि "पर्यवेक्षण शून्य है" मैंने कोशिश की और अनंत लूप में फंस गया। – finneycanhelp

+0

चढ़ाई के वैकल्पिक केवल कुछ महत्वहीन प्रोसेसर चक्र लेते हैं, और आपको कुछ भी मानने की आवश्यकता नहीं है। मुझे अनंत लूप नहीं मिलता है। – TJez

11

यह पर्यवेक्षक पदानुक्रम सीधे जाने के लिए प्रोसेसर समय की एक महत्वपूर्ण मात्रा है। मेरे पास यह मेरी UIView श्रेणी में है।

- (UIView *)rootView { 
    UIView *view = self; 
    while (view.superview != Nil) { 
     view = view.superview; 
    } 
    return view; 
} 

swift3/4:

func rootSuperView() -> UIView 
{ 
    var view = self 
    while let s = view.superview { 
     view = s 
    } 
    return view 
} 
+1

आपकी विधि हमेशा 'self.window' – DUzun

+0

नहीं लौटाती है, यह पदानुक्रम में उच्चतम UIView तत्व पाएगा। बेशक अगर आप इसे केवल उन विचारों पर चलाते हैं जो स्वयं के अधीन हैं। विन्डो यह केवल स्वयं को वापस कर देगा। विन्डो। – TJez

संबंधित मुद्दे