2010-05-05 9 views
10

Siente como que estoy un poco loco aquí. Tengo una vista de detalle con algunos UITextField s independientes, unos UITextFields en UITAbleViewCell s, y uno solo UITableViewCell que se utilizará para guardar notas, si las hay. Solo quiero que esta celda sea seleccionable cuando estoy en modo de edición. Cuando no estoy en modo de edición, no quiero poder seleccionarlo. Al seleccionar la celda (mientras está en el modo de edición) se activará un método que iniciará una nueva vista. Sé que esto es muy fácil, pero me falta algo en alguna parte.Configurando correctamente willSelectRowAtIndexPath y didSelectRowAtIndexPath para enviar selecciones de celda

Éstos son los métodos de selección actual que estoy usando:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.editing) { 
     NSLog(@"Returning nil, not in edit mode"); 
     return nil; 
    } 
    NSLog(@"Cell will be selected, not in edit mode"); 
    if (indexPath.section == 0) { 
     NSLog(@"Comments cell will be selected"); 
     return indexPath; 
    } 
    return nil; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.editing) { 
     NSLog(@"Not in edit mode. Should not have made it this far."); 
     return; 
    } 

    if (indexPath.section == 0) 
     [self pushCommentsView]; 
    else 
     return; 
} 

Mi problema es realmente 2 veces;

1) Incluso cuando no estoy en modo de edición, y sé que estoy devolviendo nil (debido al mensaje NSLog), aún puedo seleccionar la fila (parpadea en azul). Desde mi comprensión del método willSelectRowAtIndexPath, esto no debería estar sucediendo. Tal vez estoy equivocado acerca de esto?

2) Cuando ingreso al modo de edición, no puedo seleccionar nada. el método willSelectRowAtIndexPath nunca se dispara, y tampoco lo hace el didSelectRowAtIndexPath. Lo único que estoy haciendo en el método setEditing es ocultar el botón Atrás durante la edición y asignar firstResponder al texto superior para que aparezca el teclado. Pensé que tal vez el primer respondedor se interpusiera en el camino del clic (que sería tonto), pero incluso con ese comentario, no puedo realizar la selección de celda durante la edición.

Respuesta

16

Buen señor Soy un idiota. Nunca agregué estas líneas:

self.tableView.allowsSelection = NO; // Keeps cells from being selectable while not editing. No more blue flash. 
self.tableView.allowsSelectionDuringEditing = YES; // Allows cells to be selectable during edit mode. 

Perdón por la pregunta de basura.

+1

En Xcode 4.2/iOS5, estos se pueden configurar en TableView en el Interface Builder. –

+0

Lo resolvió seleccionando 'Selección única' en la opción de" selección "del Guión gráfico/Interfaz. ¡GRACIAS! –

4

La documentación indica que no se llama al tableView:willSelectRowAtIndexPath: cuando está en modo de edición. Además, el destello azul sucederá incluso si cancela la selección. De la documentación:

Este método no se llama hasta que los usuarios tocan una fila y luego levantan el dedo; la fila no se selecciona hasta entonces, aunque se resalta al tocarla. Puede usar UITableViewCellSelectionStyleNone para deshabilitar la apariencia de la celda resaltada en el toque descendente. Este método no se invoca cuando la propiedad de edición de la tabla está establecida en SÍ (es decir, la vista de tabla está en modo de edición).

+1

Gracias por la respuesta. Me hizo revisar los documentos, lo que me hizo darme cuenta de mi tonto error. –

+0

Solo quiero aclarar esta respuesta citando la documentación en su totalidad: "... No se llama a este método cuando la vista de tabla está en modo de edición (es decir, la propiedad de edición de la vista de tabla está establecida en SÍ) ** a menos que la vista de tabla permita la selección durante la edición (es decir, la propiedad allowsSelectionDuringEditing de la vista de tabla está establecida en SÍ). ** " – Pat

Cuestiones relacionadas