Mover una UIView en la parte superior de UITableView: al tocar la parte superior UIView todavía se seleccionan las filas de la tabla

Tengo una UIView que contiene tres contenedores

Container A - contains a UITableView Container B - contains Container C and Container O Container C - contains a UITableView * - touch event @ - touch event ---------------------- | | | | ---*| B | | --- | | | -A- | ----------- | | --- ||@----C---- | | | | ----------- | ---------------------- 

Un evento ocurre cuando cambio el marco del contenedor B (y muestro una vista (labelda O) a la derecha de B, lo cual no es importante). Ahora el contenedor B se superpone al contenedor A

 O - Other view (unimportant) $ - original location of touch @ ---------------------- | | | | | --|* B | | | --| | | | -A|------------ |O| | --||@-$--C----| | | | |------------ | | ---------------------- 

Pero ahora, cuando trato de seleccionar una fila en el UITableView del Contenedor C al tocar el borde izquierdo de la fila (@), el toque está siendo registrado por UITableView del Contenedor A. O incluso si toco en la vista de arriba de la tabla (*), se seleccionará la fila correspondiente en A.

Puedo resolver parte del problema cambiando el ancho de UITableView del Contenedor A. Pero aún tengo el problema de que si toco la tabla C (@), la fila de C no selecciona. Es como si el inicio de la tabla C estuviera en la location anterior ($).

Entonces, ¿qué puedo hacer para que al tocar la nueva location @ se select la fila correcta en C?

=======

EDITAR con algún código:

Este es el código que hago en Container B. Es una animation muy directa del marco de B. self.view es UIView del contenedor B.

Todas las vistas están en la pantalla (el "otro" contenedor está oculto) a través del Storyboard. Otro contenedor es una subvista de B.

 // this code basically aligns the "other" container to the right/"offscreen" of // Container B. Yes extending beyond the frame of B, but this part works fine CGRect otherContainerFrame = self.otherContainerView.frame; otherContainerFrame.origin.x = CGRectGetMaxX(self.view.frame); [self.otherContainerView setFrame:otherContainerFrame]; [self.otherContainerView setHidden:NO]; // I'm going move Container B by the width of the "other" view float offset = CGRectGetWidth(self.otherContainerView.frame); CGRect frame = self.view.frame; frame.origin.x -= offset; [UIView animateWithDuration:.35 animations:^{ [self.view setFrame:frame]; } ]; 

Por favor, hágamelo saber qué otro código desea ver.

Mmm … No estoy seguro de si esto funciona en su caso, pero trate de administrar su animation en un contenedor más grande que contenga todo su otro contenedor.

Es decir, crea un contenedor Z que contenga A, B, O y sus subprocesss e intente animar la position de B de Z, comprobando que B está delante de A.

Entonces descargué Revelar para ver visualmente (en 3d) lo que estaba sucediendo con las vistas. Parece que los diagtwigs que dibujé no son completos y engañosos.

Cada uno de los contenedores A y B (que son UIViews) contienen subvistas A 'y B' (también UIViews). En el bloque de animation cuando estaba cambiando self.view, realmente estaba moviendo el marco para B '. El marco se estaba moviendo fuera de los límites de B.

 ---------------------- | A' | B' | | ---*| B | | --- | | | -A- | ----------- | | --- ||@----C---- | | | | ----------- | ---------------------- 

Así que incluso el B 'se superponía con A y A', supongo que en la jerarquía de vistas, el toque sigue siendo capturado por las subvistas subyacentes (contenedores) A ​​y B. No creo que así sea como debería suceder, pero Supongo que así es como caen las cosas.

De todos modos, la solución fue simple.

en lugar de:

 [self.view setFrame:frame]; 

Esencialmente voy a hacer:

 [self.view.superview setFrame:frame];