Le etichette e le immagini create a livello di programmazione non vengono visualizzate sullo schermo

StackOverflow https://stackoverflow.com/questions/5409129

  •  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:

inserisci qui la descrizione dell'immagine

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top