Le etichette e le immagini create a livello di programmazione non vengono visualizzate sullo schermo
-
29-10-2019 - |
Domanda
Ho la seguente app, è come una chat, quindi sto creando in modo programmatico alcune etichette, immagini e pulsanti.
Il problema è che quelli che aggiungo all'avvio vengono visualizzati e quelli che aggiungo in seguito no.
È come se la vista avesse bisogno di essere rinfrescata o qualcosa del genere.
Se chiamo la stessa funzione di disegno da un set IBAction a un pulsante ... ne viene visualizzato il contenuto ..
se proviene dall'evento thread che cerca nuovi eventi e lo notifica alla classe tramite:
[[NSNotificationCenter defaultCenter] postNotificationName:@"NewMessageNotification" object:self userInfo:values];
quindi non mostra nulla. Ma la funzione è effettivamente chiamata (ho controllato con il debugger) Potrebbe essere che non usi l'istanza corretta della vista?
ecco il mio layout:
ed ecco la mia funzione che crea i controlli:
UILabel *labelMessage = [[UILabel alloc] initWithFrame:CGRectMake(left+5, lastcalculatedHeight-5, 220, calculatedHeight)];
[labelMessage setText:msg];
[labelMessage setFont:[UIFont fontWithName:@"Arial" size:12.0]];
[labelMessage setLineBreakMode:UILineBreakModeWordWrap];
[labelMessage setTextColor:[UIColor blackColor]];
[labelMessage setAdjustsFontSizeToFitWidth:NO];
[labelMessage setNumberOfLines:floor( msg.length / 40 )+2];
[labelMessage setBackgroundColor:[UIColor clearColor]];
[scrollView addSubview:labelMessage];
[labelMessage release];
UIButton *buttonTime = [[UIButton alloc] initWithFrame:CGRectMake(left, lastcalculatedHeight+40, 50, 20)];
[buttonTime setBackgroundImage:[[UIImage imageNamed:@"hour_bubble.png"] stretchableImageWithLeftCapWidth:9 topCapHeight:13] forState:UIControlStateDisabled];
[buttonTime setFrame:CGRectMake(left_hour_button, lastcalculatedHeight+calculatedHeight-30, 55, 25)];
[buttonTime setTitle:date2 forState:UIControlStateDisabled];
[buttonTime setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
buttonTime.titleLabel.font=[UIFont fontWithName:@"Helvetica" size:8.0];
buttonTime.titleLabel.lineBreakMode= UILineBreakModeWordWrap;
[buttonTime setEnabled:FALSE];
[scrollView addSubview:buttonTime];
[buttonTime release];
Voglio anche scorrere automaticamente la uiscrollview verso il basso quando chiamo questa funzione ... ma fallisce, è come se il simulatore stesse impazzendo quando chiamo quanto segue: Ho provato a utilizzare
CGPoint offset = CGPointMake(0,lastcalculatedHeight);
[scrollView setContentOffset: offset animated: YES];
L'ho preso da UIScrollView scorri fino in fondo a livello di programmazione
Soluzione
Il comportamento che descrivi sembra che la tua notifica non venga inviata al thread principale;tutti gli aggiornamenti dell'interfaccia utente devono essere eseguiti sul thread principale.Vedi miorispondi alla tua altra domanda per un po 'di codice per aggirare il problema.