2012-08-17 1 views
10

Devo essere in grado di rimuovere un pulsante da una vista e aggiungerne uno diverso. Il mio codice è simile al seguente:removeFromSuperview non funziona

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

L'emptyViewController è solo un controller normale vista vuoto. Sto aggiungendo un pulsante nel mezzo. Colpisco NSlog ok che controlla il tag, ma la vista non viene rimossa. Dovrei menzionare che sto usando un thread che attiva l'updatepromobanner ogni 5 secondi.

+29

Si prega di iniziare il vostro nomi di metodo con le lettere minuscole. –

risposta

42

Oscar ha ragione. Devi aggiornare l'interfaccia sul thread principale. Ho pensato di aggiungere del codice per aiutare.

Sostituire:

[subView removeFromSuperview]; 

Con:

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

e penso che si dovrebbe essere pronti per partire, senza cambiare niente altro.

+0

Mi hai fatto impazzire per ore. Grazie! – user987723

+0

Felice di aiutare. Happy Coding :) –

+0

Ehi @RyanPoolos, mi stavo chiedendo se e se invece di un pulsante, fosse un viewcontroller separato che volevo estrarre? Ogni volta che lo rimuovo, si genera un errore. Se hai tempo, ecco una domanda che ho postato diverse ore fa. http://stackoverflow.com/questions/15490656/ipad-objective-c-using-removefromsuperview-to-remove-uicollectionviewcontroller Grazie! – gdubs

8

Non è possibile aggiornare l'interfaccia utente utilizzando un thread secondario, ogni volta che il thread esegue gli aggiornamenti dell'interfaccia utente è necessario chiamare il thread principale.

5
dispatch_async(dispatch_get_main_queue(), ^{ 
     [subView removeFromSuperview]; 
}); 

Ricorda aggiornamento dell'interfaccia utente nel thread principale :)