uitableviewdatasource uitableviewcell tutorial example efecto custom apple iphone objective-c uitableview nsindexpath

iphone - uitableviewcell - uitableviewdatasource swift 4



UITableView Cell IndexPath (4)

¿Alguien puede decirme cómo puedo obtener un IndexPath celular? Estaba guardando el IndexPath en el método tableView: cellForRowAtIndexPath: pero esto solo se carga cuando se ve la celda y necesito saber su ruta de índice en el método viewDidLoad. esto dio como resultado un valor nulo porque, como dije, solo carga su valor después de que la celda se haya visto una vez.

Gracias.

EDITAR

La intención es poder saltar a una celda específica que tiene su número específico pero no es lineal con el recuento de secciones y filas.


Me parece que respondiste a tu propia pregunta: no puedes. Porque la celda no tiene una indexPath cuando se ejecuta viewDidLoad. Y, de hecho, tampoco tiene uno más adelante, porque la misma celda podría reutilizarse para estar en otro índice dentro de una décima de segundo, si usa la eliminación de la celda (¡qué palabra!), Lo que debería.

EDIT: Ok, creo que veo lo que quiere: está guardando el indexPath en algún lugar cuando le entrega la celda a la tableView. Nota: si no hace esto, no hay forma de saber realmente en qué indexPath se coloca una celda en particular, al menos no si está haciendo las cosas como debe.

Entonces, lo que puede hacer es simplemente crear todas las celdas en su método viewDidLoad, almacenarlas en una matriz y luego, cuando la vista de la tabla las solicite, simplemente entregarlas desde esa matriz.

Tenga en cuenta que esta no es una buena forma de rellenar una vista de tabla, ya que evita que las celdas se reutilicen. Una mejor manera sería guardar el contenido de las celdas (vistas UIV sin formato) en la matriz y agregarlas como elementos secundarios a la vista de contenido de la celda antes de devolver la celda. Esto permitiría la reutilización de la celda, lo cual es crucial para un buen desempeño. Sin embargo, si no tiene más celdas de las que caben en la pantalla, no tiene que preocuparse por volver a usarlas.


Prueba este ...

NSSet *touches = [event allTouches]; UITouch *touch = [touches anyObject]; CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj]; NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition]; NSLog(@"Selected row:%d in section:%d",indexPath.row,indexPath.section);

Llama así:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside];


Un UITableViewCell no tiene una propiedad NSIndexPath . El delegado UITableViewDataSource define métodos que solicitan una celda para un NSIndexPath determinado, pero eso no significa que la celda tenga una relación duradera con una propiedad NSIndexPath .

Tal vez ayudaría si explicara más de lo que quería esta propiedad? ¿Qué desea hacer con la ubicación de la celda en viewDidLoad ?


Utilice el método indexPathForCell: en el tableView, dado un puntero a un UITableViewCell , devuelve su indexPath.

Puede colocar scrollToRowAtIndexPath:atScrollPosition:animated: en el método viewWillAppear si aún no está configurado en viewDidLoad . Este es un lugar mejor de todos modos si la vista puede aparecer más de una vez después de ser cargada, como cuando un controlador de vista modal al que invoca renuncia.