12

ビューからボタンを削除して、別のボタンを追加できるようにする必要があります。私のコードは次のようになります。

-(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は、単なる空のViewControllerです。真ん中にボタンを追加しています。タグをチェックするNSLogokを押しましたが、ビューが削除されません。5秒ごとにupdatepromobannerを起動するスレッドを使用していることに言及する必要があります。

4

3 に答える 3

44

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

交換:

[subView removeFromSuperview];

と:

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

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

于 2012-08-17T11:58:02.250 に答える
9

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

于 2012-08-17T11:54:40.283 に答える
5
dispatch_async(dispatch_get_main_queue(), ^{
         [subView removeFromSuperview];
});

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

于 2015-07-07T07:59:25.037 に答える