2012-07-25 9 views
9

Acabo de notar algo muy extraño con la clase UITableViewCell en iOS y la propiedad userInteractionEnabled.Error extraño de iOS con UITableViewCell y userInteractionEnabled

Parece que si userInteractionEnabled se establece en NO antes de asignar texto a la etiqueta de la celda, entonces el texto es de color gris. Sin embargo, al configurar userInteractionEnabled a NO después de el texto se ha establecido deja el color del texto como negro (consulte el fragmento de código de ejemplo a continuación).

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

Esto es muy molesto, porque significa que termino con un comportamiento diferente en el caso de que se vuelve a utilizar una célula. El ejemplo anterior lo demuestra: la primera página de la tabla muestra filas alternativas con texto gris/negro. Desplácese más abajo para que las células se vuelvan a utilizar, y puede ver que las cosas van mal.

Me pregunto si estoy haciendo algo mal, o si esto es un error de iOS? Veo el problema en iOS 5.1 en el iPad 3. ¡Cualquier idea realmente apreciada!

+1

Si yo tienes un error reproducible (especialmente con algún código de ejemplo) y luego infórmalo a Apple: https://developer.apple.com/bugreporter/ –

+0

Informé esto a Apple (hace un tiempo), por cierto. Aún no escuché nada ... –

Respuesta

1

He descubierto que si pongo cell.textLabel.textColor = [UIColor blackColor]; justo antes cell.userInteractionEnabled = NO;, parece solucionar el problema. Esta es la forma en que está trabajando en iOS 6.0.1

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

creo que he encontrado una solución más conveniente para este problema (que considero un error):

Establecer la propiedad enabled en textLabel y detailTextLabel como manualmente esto:

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

esto me llevó a la respuesta: https://stackoverflow.com/a/13327632/921573

Cuestiones relacionadas