2012-07-25 10 views
9

Ho appena notato qualcosa di molto strano con la classe UITableViewCell su iOS e la proprietà userInteractionEnabled.Bug strano di iOS con UITableViewCell e userInteractionEnabled

Sembra che se userInteractionEnabled è impostato su NO prima dello che assegna il testo all'etichetta della cella, il testo viene colorato in grigio. Tuttavia, impostando userInteractionEnabled su NO dopo il testo è stato impostato, il colore del testo diventa nero (vedere il frammento di codice di esempio riportato di seguito).

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (!cell) 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 

    // swap these two lines around, and the text color does not change to grey! 
    cell.userInteractionEnabled = (indexPath.row % 2) == 0; 
    cell.textLabel.text = @"Hello"; 

    return cell; 
} 

Questo è davvero fastidioso, perché significa che alla fine con un comportamento diverso nel caso che una cella viene riutilizzato. L'esempio sopra lo dimostra: la prima pagina della tabella mostra righe alternate con testo grigio/nero. Scorri più in basso in modo che le celle vengano riutilizzate e puoi vedere che le cose vanno male.

Mi chiedevo se sto facendo qualcosa di sbagliato o se si tratta di un bug di iOS? Vedo il problema in iOS 5.1 su iPad 3. Qualsiasi intuizione è davvero apprezzata!

+1

Se yo hai un bug riproducibile (specialmente con qualche codice di esempio) quindi per favore segnalalo a apple: https://developer.apple.com/bugreporter/ –

+0

Ho segnalato questo a Apple (un po 'di tempo fa), btw. Non ho ancora sentito niente ... –

risposta

1

Ho scoperto che se inserisco cell.textLabel.textColor = [UIColor blackColor]; subito prima dello cell.userInteractionEnabled = NO;, sembra che il problema sia stato risolto. Questo è come si sta lavorando su iOS 6.0.1

cell.textLabel.textColor = [UIColor blackColor]; 
cell.userInteractionEnabled = NO; 
1

Credo di aver trovato una soluzione più conveniente per questo problema (che io ritengo essere un bug):

Impostare la proprietà enabled su textLabel e detailTextLabel come manualmente questo:

cell.userInteractionEnabled = (indexPath.row % 2) == 0; 
cell.textLabel.enabled = cell.isUserInteractionEnabled; 
cell.detailTextLabel.enabled = cell.isUserInteractionEnabled; 

questo mi ha portato alla risposta: https://stackoverflow.com/a/13327632/921573

Problemi correlati