removeFromSuperview不起作用

use*_*723 12 iphone xcode objective-c uiview

我需要能够从视图中删除一个按钮并添加另一个按钮.我的代码看起来像这样:

-(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];
}
Run Code Online (Sandbox Code Playgroud)

emptyViewController只是一个普通的空视图控制器.我正在中间添加一个按钮.我点击NSLog ok检查标签,但视图没有被删除.我应该提到我正在使用一个每隔5秒触发updatepromobanner的线程.

Rya*_*los 44

奥斯卡是对的.您必须更新主线程上的接口.想我会添加一些代码来帮助.

更换:

[subView removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

附:

[subView performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)

我认为如果不改变其他任何事情,你应该好好去.


Osc*_*mez 9

您无法使用辅助线程更新UI,每当您的线程进行UI更新时,您必须调用主线程.


小智 5

dispatch_async(dispatch_get_main_queue(), ^{
         [subView removeFromSuperview];
});
Run Code Online (Sandbox Code Playgroud)

记得在主线程中更新UI :)