Permitir que se seleccione la celda de vista de tabla en función de la cadena de URL

Estoy creando un menú de "páginas favoritas" en mi aplicación de vista de tabla, donde los usuarios pueden guardar sus páginas web favoritas y luego navegar hacia ellas más fácilmente a través del menú.

El programa guarda el nombre de la página y la URL de cada espacio de página favorita en la aplicación de configuración. La URL predeterminada es "clara", lo que significa que aún no hay una URL (es decir, la ranura favorita no está en uso).

Cuando un usuario hace clic en una celda de vista de tabla para su página favorita deseada, la vista cambia a una UIWebview y se carga la URL. Lo hice de modo que si la URL isEqualToString @"clear",la UIWebView no cargará la pantalla y "no pasará nada".

Pero cuando el usuario hace clic en la celda de la vista de tabla con una URL configurada para "borrar", la celda sigue resaltada en azul. Esto hace que al usuario le parezca que la celda de la vista de tabla no está borrada. ¿Hay alguna forma de comprobar si la URL isEqualToString @"clear" y evitar que la celda se resalte en azul antes de hacerlo?

Gracias.

preguntado el 01 de febrero de 12 a las 03:02

2 Respuestas

EDITAR: Esta es una mejor manera (hacerlo en willSelect ... es demasiado tarde en el primer toque).

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
       ...
       if ( --THIS IS THE 'CLEAR' URL CASE-- ) {
            // This will prevent the **appearance** of being selected
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
       } else {
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
       }
       ...
  }

En didSelectCellForIndexPath ...

 if ( -- 'CLEAR' CASE -- ) {
       // Do nothing...
 } else {
       // do whatever you do for the selected case...
 }

Respondido 02 Feb 12, 04:02

Pero, ¿cómo instruiría a la celda para que no se seleccionara y, en cambio, no hiciera nada? - dgund

¿Debo restablecer el estilo de selección después o se restablece automáticamente? Cuando el usuario hace clic en una URL real, quiero que aún se resalte. - dgund

No se reiniciará automáticamente. Debe configurarlo explícitamente para cada celda en cellForRowAtIndexPath. - Rayfleck

Es cierto, pero las celdas de vista de tabla se reutilizan y usted no tiene control sobre cuál obtendrá cuando una celda en particular aparezca en la vista. - Rayfleck

Sí, y es un buen hábito para adquirir. (Confía en mí esta vez...). Actualicé el código, échale un vistazo. - Rayfleck

Deberías hacer esto en tableView:willSelectRowAtIndexPath:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *url = [self urlForIndexPath:indexPath];

    if ([url isEqualToString:@"clear"])
        return nil;

    return indexPath;
}

Pero si no desea el resaltado azul, también debe cambiar el estilo de selección de la celda en tableView:cellForRowAtIndexPath:

Respondido 01 Feb 12, 18:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.