uitableviewcell tutorial tablas efecto apple objective-c uitableview storyboard ios8

objective-c - tablas - uitableview tutorial swift 4



La selección de UITableViewCell Segue del guión gráfico es lenta, aunque el doble toque funciona (2)

En mi caso, la solución terminó siendo llamar a performSegue manualmente desde didSelectRow en la cola principal usando GCD en lugar de usar la salida de selección de UITableViewCell en el Storyboard.

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { dispatch_async(dispatch_get_main_queue(), ^{ [self performSegueWithIdentifier:kShowDetailSegue sender:nil]; }); }

No estoy seguro de por qué esto se hizo necesario. Ciertamente, usted pensaría que la salida de selección en Storyboard operaría en la cola principal, pero tal vez sea un error de iOS 8.

Tengo un UITableViewController en un Storyboard. Tengo la selección de mi prototipo UITableViewCell para activar un segmento para presentar otro controlador. La presentación en sí está funcionando.

Noté un error extraño (posiblemente introducido en iOS 8) que al tocar en la celda resalta la celda como se esperaba, pero a veces toma varios segundos antes de realizar la operación. Tocar la celda dos veces hace que el cambio suceda inmediatamente.

¿Alguien más ha notado esto en iOS 8?

EDITAR: Ahora he notado que no es solo un doble toque lo que activa el segue más rápido. También es un toque en la celda seguido de un golpe en cualquier lugar. Empezando a parecerme un tema de hilos ...


Carlos Vela tiene razón, el error se está produciendo solo cuando la selección de UITableViewCell es ninguna y solo en dispositivos reales. Despertar CFRunLoop después de la selección resuelve el problema y esto me llevó a esta solución "universal" (que es una categoría en UITableViewCell).

ACTUALIZACIÓN: funciona perfectamente en iOS7 pero en iOS8 rompe el fondo transparente de UITableViewCell (será blanco).

#import <objc/runtime.h> @implementation UITableViewCell (WYDoubleTapFix) + (void)load { Method original, swizzled; original = class_getInstanceMethod([UITableViewCell class], @selector(setSelected:animated:)); swizzled = class_getInstanceMethod([UITableViewCell class], @selector(mySetSelected:animated:)); method_exchangeImplementations(original, swizzled); } - (void)mySetSelected:(BOOL)selected animated:(BOOL)animated { [self mySetSelected:selected animated:animated]; CFRunLoopWakeUp(CFRunLoopGetCurrent()); } @end