removeFromSuperview doesn't work
21,314
Solution 1
Oscar is right. You have to update the interface on the main thread. Figured I'd add in some code to help.
Replace:
[subView removeFromSuperview];
With:
[subView performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO];
And I think you should be good to go without changing anything else.
Solution 2
You cannot update the UI using a secondary thread, whenever your thread is doing UI updates you must call the main thread.
Solution 3
dispatch_async(dispatch_get_main_queue(), ^{
[subView removeFromSuperview];
});
Remember update UI in main thread :)
Author by
user987723
Updated on July 07, 2020Comments
-
user987723 almost 4 years
I need to be able to remove a button from a view and add a different one. My code looks like this:
-(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]; }
The emptyViewController is just a plain empty view controller. I'm adding a button in the middle. I hit the NSLog ok that checks the tag, but the view does not get removed. I should mention I'm using a thread thats firing the updatepromobanner every 5 secs.