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, который проверяет тег, но представление не удаляется. Должен упомянуть, что я использую поток, который запускает updatepromobanner каждые 5 секунд.
Ответы
Ответ 1
Оскар прав. Вы должны обновить интерфейс в основном потоке. Понял, что я добавлю код, чтобы помочь.
Заменить:
[subView removeFromSuperview];
С помощью:
[subView performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO];
И я думаю, вам должно быть хорошо идти, ничего не меняя.
Ответ 2
Вы не можете обновлять пользовательский интерфейс, используя дополнительный поток, каждый раз, когда ваш поток выполняет обновления пользовательского интерфейса, вы должны вызывать основной поток.
Ответ 3
dispatch_async(dispatch_get_main_queue(), ^{
[subView removeFromSuperview];
});
Помните обновление интерфейса в основном потоке:)