2011-11-04 11 views
5

iOS में, प्रोग्रामेटिक रूप से, कैसे एक शीर्षUIView है?"शीर्ष-सबसे अधिक" दृश्य का संदर्भ कैसे लें?

दूसरे शब्दों में .. अभी क्या दृश्य प्रदर्शित होता है?

कहें, मेरे पास एक दूसरे के शीर्ष पर 3 दृश्यों के साथ एक निब है। एक कार्यक्रम के अंदर, अगर मैं जानता हूं कि यह क्या है, तो मैं शीर्ष दृश्य को हटा सकता हूं। मैं कैसे पता लगा सकता हूं कि निब के शीर्ष पर क्या दृश्य है?

उत्तर

9

आपके पास बहुत सारे शीर्ष दृश्य हो सकते हैं क्योंकि दृश्य को सभी स्क्रीन नहीं लेनी पड़ती है।

आप एक दृश्य के शीर्ष सबसे subview चाहते हैं, आप

[yourView subviews]; 

फोन और tje पिछले एक ले जा सकते हैं

[[yourView subviews] objectAtIndex:[[yourView subviews] count]]; 

संपादित करें (वे प्रदर्शित क्रम में, सबसे आखिरी सामने हैं): यह बेहतर है (टिप्पणियों से)

[[yourView subviews] lastObject]; 

यदि आप अपने प्रदर्शित दृश्य को जानते हैं नियंत्रक बस आपके द्वारा अपने दृश्य को प्रतिस्थापित करें rController.view

+0

IsHidden के लिए परीक्षण करने के लिए मत भूलना। और .alpha! = 0. और यह दृश्य ऑन-स्क्रीन है। आपके उदाहरण में –

+0

, मुझे कैसे पता चलेगा कि आपका 'दृश्य' क्या है? – JAM

+0

जैसा कि मैंने अपनी आखिरी वाक्य में कहा था, आपका दृश्य आपका मेन व्यू कंट्रोलर हो सकता है। यदि आपका मेन व्यू कंट्रोलर नियंत्रक है जो प्रदर्शित दृश्यों को संभालता है (उदाहरण के लिए आपका रूट व्यू कंट्रोलर यदि आपने कोई मोडल व्यू कंट्रोलर नहीं जोड़ा है या नेविगेशन नियंत्रक में किसी भी नियंत्रक को धक्का नहीं दिया है) । अधिक आम तौर पर, यह पहला विचार है जो आप जानते हैं कि वर्तमान में प्रदर्शित है। यदि आप एक अधिक सटीक उत्तर चाहते हैं तो आपको यह बताने की आवश्यकता होगी कि आपका आवेदन क्या है और यह क्या प्रदर्शित हो रहा है, और मैं आपको यह बताने में सक्षम हूं कि आपको क्या उपयोग करना है। – MatLecu

3

पसंद या नापसंद के इस

UIWindow *window = [[UIApplication sharedApplication].keyWindow; 
UIView *topMost = [window findTopMostViewForPoint:CGPointMake(100, 100)]; 

कार्य

@implementation UIView (Extra) 

- (UIView *)findTopMostViewForPoint:(CGPoint)point 
{ 
    for(int i = self.subviews.count - 1; i >= 0; i--) 
    { 
     UIView *subview = [self.subviews objectAtIndex:i]; 
     if(!subview.hidden && CGRectContainsPoint(subview.frame, point)) 
     { 
      CGPoint pointConverted = [self convertPoint:point toView:subview]; 
      return [subview findTopMostViewForPoint:pointConverted]; 
     } 
    } 

    return self; 
} 

- (BOOL)isTopmostViewInWindow 
{ 
    if(self.window == nil) 
    { 
     return NO; 
    } 

    CGPoint centerPointInSelf = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); 
    CGPoint centerPointOfSelfInWindow = [self convertPoint:centerPointInSelf toView:self.window]; 
    UIView *view = [self.window findTopMostViewForPoint:centerPointOfSelfInWindow]; 
    BOOL isTopMost = view == self || [view isDescendantOfView:self]; 
    return isTopMost; 
} 

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