12
votes

SupprimerFromsuperView ne fonctionne pas

Je dois être capable de supprimer un bouton d'une vue et d'ajouter un autre. Mon code ressemble à ceci:

-(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];
}


1 commentaires

Veuillez commencer vos noms de méthodes avec des lettres minuscules.


3 Réponses :


9
votes

Vous ne pouvez pas mettre à jour l'interface utilisateur à l'aide d'un thread secondaire, chaque fois que votre thread est des mises à jour de l'interface utilisateur, vous devez appeler le fil principal.


0 commentaires

44
votes

Oscar a raison. Vous devez mettre à jour l'interface sur le fil principal. Figuré j'ajouterais un certain code pour aider.

Remplacer: xxx

avec: xxx

et je Pensez que vous devriez être bon d'aller sans changer d'autre.


4 commentaires

Me conduisait fou pendant des heures. Merci!


Heureux de vous aider. Codage heureux :)


Hey @ryanpoolos, je me demandais si quoi se passe-t-il si au lieu d'un bouton, c'est un mode de vue distinct de Concontroller Taht, je voulais sortir? Chaque fois que je l'enlève, cela lancerait une erreur. Si vous avez le temps, voici une question que j'ai postée il y a plusieurs heures. Stackoverflow.com/ Questions / 15490656 / ... Merci!


Semble étrange que Apple avertit dans la documentation sur l'appelant de la part de la méthode de la vue Drawrect: (qui semble modérément évidente) mais ne mentionne pas cela.



5
votes
dispatch_async(dispatch_get_main_queue(), ^{
         [subView removeFromSuperview];
});
Remember update UI in main thread :)

0 commentaires