Poner una vista personalizada en un UITableView

Tengo un UITableView de estilo regular, el que tiene un background blanco y líneas horizontales grises para separar las filas.

Tengo otra UIView personalizada que es solo un rectángulo de 100×100 lleno de color rojo.

¿Cómo puedo colocar este último en el primero, de modo que aparezca sobre las líneas horizontales, pero sigue siendo una "parte" de la vista de la tabla en el sentido de que cuando desploop la vista de la tabla, la vista roja se desplaza con ella? De hecho, también debería poder poner mi dedo en el área roja y desplazarme por la vista de la tabla.

Una vez más, si la vista roja se coloca para superponer algunas líneas horizontales, debería aparecer sobre las líneas. Tristemente, cuando agrego la vista roja como subvista a la vista de tabla, las líneas horizontales pasan sobre la vista roja; mira esta captura de pantalla

¿Cómo se puede lograr esto?

EDITAR

Si está intentando agregar la vista a encima de las líneas (oculte las líneas) intente usar – bringSubviewToFront: para llevarlo al frente de la vista de la tabla.

 [self.tableView bringSubviewToFront:networkingView]; 

MÁS

Agregue la vista al self.tableView.tableHeaderView esto lo colocará encima de la vista de la tabla y se desplazará con la vista de la tabla.

 UIView *networkingView = [[UIView alloc]init]; networkingView.frame = //set the frame networkingView.backgroundColor = [UIColor networkingColor]; self.tableView.tableHeaderView = networkingView; 

Buena suerte

El lugar correcto para manejar el order de astackmiento de su cuadrado rojo está en el método layoutSubviews . La vista de la tabla se envía a la vista de layoutSubviews cualquier momento cuando agrega o elimina subvistas (y en otras ocasiones).

Necesita hacer una subclass de UITableView que tenga una reference al cuadrado rojo:

 @interface MyTableView : UITableView @property (weak, readonly) IBOutlet UIView *networkingSquare; @end 

Puede inicializar networkingSquare de la forma que desee. Acabo de ponerlo en mi nib junto con la vista de tabla, y lo moví para ser una subvista de la vista de tabla en awakeFromNib :

 @implementation MyTableView @synthesize networkingSquare = _networkingSquare; - (void)awakeFromNib { [self addSubview:self.networkingSquare]; } 

De todos modos, para asegurarse de que el cuadrado rojo siempre esté en la parte superior de las celdas de la tabla y las líneas de la cuadrícula, anule las layoutSubviews como:

 - (void)layoutSubviews { [super layoutSubviews]; [self bringSubviewToFront:self.networkingSquare]; } 

Simplemente agregue esta vista a UITableView como subvista:

 [tableView addSubview:myRedView]; 

Consulte la propiedad userInteractionEnabled para manejar la interacción y el desplazamiento.

Haga que su vista sea una subvista de cualquier subvista normal de UITableView : un encabezado, un pie de página o cualquier UITableViewCell .

Creo que lo que has descrito se puede lograr mejor usando una UITableViewCell o incluso una subvista del encabezado. Una celda tiene la capacidad inherente de desplazarse por la tabla y puede personalizarse de la manera que desee. Es esencialmente una vista.

En su situación, por ejemplo, es posible que desee que el cuadro rojo aparezca por defecto en la parte superior de la tabla. Haría que la primera celda fuera una celda de "cuadro rojo", donde insertía su cuadro rojo en la vista de contenido de la celda.

Entonces, su problema es, básicamente, que UITableViewCells de una UITableView se agreguen como Subviews dinámicamente, y no puede controlar si se agregan delante o detrás de su vista.

Por lo tanto, para mantener su vista al frente, debe recuperarla cada vez que se agreguen celdas, lo que ocurre cuando se desplaza UITableView.

Le sugiero que intente agregar su vista personalizada como una subvista y luego anular -scrollViewDidScroll así:

 - (void)scrollViewDidScroll { [super scrollViewDidScroll]; // myCustomView is your custom view referenced in an IVar [self.tableView bringSubviewToFront:myCustomView]; } 

Edite su delegado ViewWillAppear con estas líneas

 UIView *networkingView=[[UIView alloc]initWithFrame:CGRectMake(30,30, 100, 100)]; networkingView.backgroundColor=[UIColor networkingColor]; [self.tableView addSubview:networkingView];