2012-08-17 118 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のokを押すが、ビューは削除されない。私は、5秒ごとにupdatepromobannerを起動するスレッドを使用していることを言及する必要があります。

+29

は小文字を使用してメソッド名を起動してください。 –

答えて

42

オスカーは正しいです。メインスレッドのインターフェイスを更新する必要があります。私はいくつかのコードを追加すると思います。

[subView removeFromSuperview]; 

で:

は交換してください

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

そして、私はあなたが何かを変えずに行くために良いことだと思います。

+0

私は何時間も怒っていました。ありがとう! – user987723

+0

喜んで助けてください。ハッピーコーディング:) –

+0

ちょっと@RyanPoolos、ボタンの代わりに、それは私が取り出したいと思った別のviewcontrollerだと思っていたのだろうか?私はそれを削除するたびに、それはエラーをスローするでしょう。ここに時間があるなら、私は数時間前に投稿した質問です。 http://stackoverflow.com/questions/15490656/ipad-objective-c-using-removefromsuperview-to-remove-uicollectionviewcontrollerありがとう! – gdubs

8

スレッドがメインスレッドを呼び出す必要があるUI更新を行っているときは、セカンダリスレッドを使用してUIを更新することはできません。

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

メインスレッドで更新UIを忘れないでください:)