2010-06-09 13 views
17

मैंने यूआईबटन, यूआईटीएक्स्टव्यू को मेरे दृश्य के लिए उप-दृश्य के रूप में जोड़ा है, प्रोग्रामेटिक रूप से।उप दृश्यों को कैसे हटाएं

notesDescriptionView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,460)]; 
notesDescriptionView.backgroundColor=[UIColor redColor]; 
[self.view addSubview:notesDescriptionView]; 

textView = [[UITextView alloc] initWithFrame:CGRectMake(0,0,320,420)]; 
[self.view addSubview:textView]; 
printf("\n description button \n"); 

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button 
    addTarget:self action:@selector(cancel:) 
    forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"OK" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 420.0, 160.0, 40.0); 
[self.view addSubview:button]; 

यहाँ अगर हम बटन पर क्लिक करें, मैं सभी उप विचारों,

दूर करने के लिए मैं

[self.view removeFromSuperView] 

कोशिश कर रहा हूँ, लेकिन इसके काम नहीं कर रहा

किसी भी मदद की जरूरत है।

उत्तर

16

मुझे लगता है कि आप उपरोक्त स्निपेट के समान कक्षा में एक विधि से [self.view removeFromSuperView] पर कॉल कर रहे हैं।

उस स्थिति में [self.view removeFromSuperView] अपने स्वयं के पर्यवेक्षण से self.view को हटा देता है, लेकिन स्वयं वह वस्तु है जिसका दृश्य आप उपदृश्य को हटाना चाहते हैं। आप वस्तु के सभी subviews निकालना चाहते हैं, तो आप के बजाय ऐसा करने की जरूरत:

[notesDescriptionView removeFromSuperview]; 
[button.view removeFromSuperview]; 
[textView removeFromSuperview]; 

शायद आपको लगता है कि सरणी में प्रत्येक तत्व पर removeFromSuperview लागू पर एक NSArray और पाश में उन लोगों के subviews स्टोर करने के लिए चाहते हैं सरणी।

+0

उप दृश्य के रूप में जोड़कर, मैंने बनाया है बटन के बारे में क्या। असल में मैं टेक्स्टव्यू के साथ एक दृश्य दिखाने की कोशिश कर रहा हूं, जब बटन दबाया जाता है, जब मैं वर्तमान दृश्य में एक और बटन क्लिक करता हूं, तो इसे मेरे पिछले दृश्य को वापस जाना होगा। – mac

+0

मैंने [नोट्स डिस्क्रिप्शन व्यू निकालें FromSuperview] की कोशिश की है; [textView removeFromSuperview]; लेकिन यह काम नहीं कर रहा है। – mac

+0

ऐसी विधि को कॉल करने का सही तरीका क्या है जो पर्यवेक्षण से अन्य वर्ग से सबव्यूव हटा देता है? मैं प्रतिनिधि विधि की कोशिश कर रहा हूं लेकिन यह काम नहीं करता है। – SanitLee

56

सभी subviews आप दृश्य

निम्नलिखित कोड

for (UIView *view in [self.view subviews]) 
    { 
    [view removeFromSuperview]; 
    } 
+1

यह उत्तर स्वीकार किया जाना चाहिए! – Umitk

7

का उपयोग मैं हमेशा हैरान कर दिया गया है कि उद्देश्य सी एपीआई सभी को दूर करने के लिए एक सरल विधि नहीं है करने के लिए जोड़ा दूर करने के लिए UIView से उप दृश्य। (फ्लैश एपीआई करता है, और आप इसे काफ़ी ज़रूरत खत्म।)

Anwyay, इस छोटे से सहायक विधि है कि मुझे लगता है कि के लिए उपयोग करते हैं:

- (void)removeAllSubviewsFromUIView:(UIView *)parentView 
{ 
    for (id child in [parentView subviews]) 
    { 
    if ([child isMemberOfClass:[UIView class]]) 
    { 
     [child removeFromSuperview]; 
    } 
    } 
} 

संपादित करें: सिर्फ एक पाया यहाँ और अधिक सुरुचिपूर्ण समाधान: What is the best way to remove all subviews from you self.view?

Am का उपयोग कर कि अब के रूप में इस प्रकार है:

// Make sure the background and foreground views are empty: 
    [self.backgroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    [self.foregroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

मैं टी की तरह टोपी बेहतर ...

एरिक

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