2012-08-17 31 views
10

मुझे दृश्य से एक बटन निकालने और एक अलग जोड़ने में सक्षम होना चाहिए। मेरा कोड इस तरह दिखता है:removeFromSuperview काम नहीं करता

-(void)UpdatePromoBanner:(NSString*)value{ 
    [button setTitle:@"newer text" forState:UIControlStateNormal]; 
    for (UIView *subView in emptyViewController.view.subviews) 
    { 
     if(subView.tag == 99) { 
      //--remove button and add an updated one 
      NSLog(@"Remove button?"); 
      [subView removeFromSuperview]; 
      //[subView.superview addSubview:button]; 
     } 
    } 
    NSLog(@"event called"); 

} 

-(void)AddPromoBannerToBottom:(UIView*)view { 

    button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
       action:@selector(aMethod:) 
    forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:lblForBannerButton forState:UIControlStateNormal]; 
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
    button.tag = 99; 

    [view addSubview:button]; 
} 

खाली दृश्य नियंत्रक केवल एक सादा खाली दृश्य नियंत्रक है। मैं बीच में एक बटन जोड़ रहा हूँ। मैंने NSLog को ठीक किया है जो टैग की जांच करता है, लेकिन दृश्य हटाया नहीं जाता है। मुझे जिक्र करना चाहिए कि मैं एक थ्रेड का उपयोग कर रहा हूं जो हर 5 सेकंड में अपडेटप्रोमोनेर को फायर कर रहा है।

+29

छोटे अक्षरों के साथ अपने विधि के नाम से शुरू करें। –

उत्तर

42

ऑस्कर सही है। आपको मुख्य धागे पर इंटरफ़ेस अपडेट करना होगा। चित्रित मैं मदद करने के लिए कुछ कोड में जोड़ना होगा।

बदलें:

[subView removeFromSuperview]; 

के साथ:

[subView performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO]; 

और मुझे लगता है आप कुछ और बदले बिना जाने के लिए अच्छा होना चाहिए।

+0

मुझे घंटों तक पागल कर दिया गया। धन्यवाद! – user987723

+0

मदद करने के लिए खुशी हुई। हैप्पी कोडिंग :) –

+0

अरे @RyanPoolos, यह सोच रहा था कि अगर बटन के बजाए क्या होता है, तो यह एक अलग दृश्य नियंत्रक है जिसे मैं बाहर लेना चाहता था? जब भी मैं इसे हटा देता हूं, यह एक त्रुटि फेंक देगा। यदि आपके पास समय है तो मैंने कई घंटे पहले एक प्रश्न पोस्ट किया था। http://stackoverflow.com/questions/15490656/ipad-objective-c-using-removefromsuperview-to-remove-uicollectionviewcontroller धन्यवाद! – gdubs

8

आप द्वितीयक थ्रेड का उपयोग करके यूआई को अपडेट नहीं कर सकते हैं, जब भी आपका धागा यूआई अपडेट कर रहा है तो आपको मुख्य धागा कॉल करना होगा।

5
dispatch_async(dispatch_get_main_queue(), ^{ 
     [subView removeFromSuperview]; 
}); 

मुख्य थ्रेड में अद्यतन यूआई याद रखें :)

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