2012-08-17 107 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]; 
} 

emptyViewController只是一個普通的空視圖控制器。我在中間添加了一個按鈕。我打了NSLog確定檢查標記,但視圖不會被刪除。我應該提到我正在使用每5秒觸發一次updatepromobanner的線程。

+29

請與小寫字母開始你的方法名。 – 2012-08-17 13:23:58

回答

42

奧斯卡是對的。您必須更新主線程上的接口。想象一下,我會添加一些代碼來提供幫助。

替換:

[subView removeFromSuperview]; 

有了:

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

而且我覺得你應該去的好,而不改變其他任何東西。

+0

一直讓我生氣幾個小時。謝謝! – user987723 2012-08-17 12:07:50

+0

很高興幫助。快樂編碼:) – 2012-08-17 12:57:48

+0

嘿@RyanPoolos,想知道如果不是一個按鈕,而是一個單獨的viewcontroller,我想拿出來?每當我刪除它,它會拋出一個錯誤。如果你有時間是幾個小時前發佈的問題。 http://stackoverflow.com/questions/15490656/ipad-objective-c-using-removefromsuperview-to-remove-uicollectionviewcontroller謝謝! – gdubs 2013-03-19 13:12:43

8

您無法使用輔助線程更新UI,只要您的線程正在進行UI更新,您必須調用主線程。

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

記得更新UI主線程:)