2012-01-31 13 views
13

¿Alguien me puede ayudar a hacer que UIView creado en código esté en la parte superior de todas las otras vistas? donde tableView es la vista principal y subSelectionView es mi vista de hermanos personalizada, quiero hacerlo sobre tableView. Tengo este código a continuación:Coloque UIView en la parte superior de todas las demás vistas

Este es el código fuente completo de mi didSelectRowAtIndexPath :, desde donde yo programación añadir instancia UIView ..

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Execute upon selection 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    [[tableView viewWithTag:199]removeFromSuperview]; 

    // Get the cell size 
    CGSize cellSize = [tableView cellForRowAtIndexPath:indexPath].frame.size; 

    // Contact Details Container 
    UIView *subSelectionView; 
    if(indexPath.row < [contacts count] - 6) 
     subSelectionView = [[UIView alloc]initWithFrame:CGRectMake(10, 0, (int)cellSize.width - 20, (int)cellSize.height + 130)]; 

    subSelectionView.backgroundColor = [UIColor grayColor]; 
    subSelectionView.layer.borderColor = [UIColor grayColor].CGColor; 
    subSelectionView.layer.borderWidth = 1; 
    subSelectionView.alpha = 0.9; 
    subSelectionView.tag = 199; 
    subSelectionView.layer.cornerRadius = 5.0; 


    // Contact Name Container 
    UIView *contactNameSubSelectionView; 
    if(indexPath.row < [contacts count] - 6) 
     contactNameSubSelectionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, (int)cellSize.width - 20, (int)cellSize.height)]; 

    contactNameSubSelectionView.backgroundColor = [UIColor grayColor]; 
    contactNameSubSelectionView.alpha = 0.5; 

    [subSelectionView addSubview:contactNameSubSelectionView]; 


    // Contact Name Label 
    Contacts *contact = [self.contacts objectAtIndex:indexPath.row]; 
    NSString *contactName = [NSString stringWithFormat:@" %@ %@ ", contact.fname, contact.lname]; 

    UILabel *contactNameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, (int)cellSize.width, (int)cellSize.height)]; 
    contactNameLabel.layer.cornerRadius = 4.0; 

    [contactNameLabel setText: contactName]; 
    [contactNameLabel setTextColor:[UIColor blackColor]]; 
    [contactNameLabel setFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]]]; 
    [contactNameSubSelectionView addSubview:(UIView *)contactNameLabel]; 


    // Buttons 
    UIButton *buttonMobile = [[UIButton alloc]initWithFrame:CGRectMake(10, cellSize.height + 10, 30, 30)]; 
    buttonMobile.layer.borderWidth = 1; 
    [buttonMobile setTitle:@"..." forState:UIControlStateNormal]; 
    [buttonMobile addTarget:self action:@selector(btPressed:) forControlEvents:UIControlStateNormal]; 

    [subSelectionView addSubview:(UIView *) buttonMobile]; 



    [[tableView cellForRowAtIndexPath:indexPath]insertSubview:subSelectionView aboveSubview:self.view]; 
    [self.parentViewController.view bringSubviewToFront:subSelectionView]; 


    [tableView reloadData]; 

} 

pero no funciona ..

la imagen de abajo muestra mi subSelectionView, el botón está dentro de ella y la subSelectionView está dentro del tableView. Ahora, cuando hice clic en ese botón, el problema es que no puedo hacer clic en él. Se enfoca directamente en tableView incluso con la presencia de mis códigos. Alguien me puede ayudar por favor? ....

enter image description here

Respuesta

6

Si leí tu pregunta correcta su problema es que no se puede en realidad pulse sobre el botón en la nueva vista de que está en la cima de la tableview?

Y cuando lo toca, el UITableView a continuación responde?

Esto significa que UIButton no reconoce que se toca, y el evento pasa a la siguiente subvista debajo de la que se procesará.

Ahora, hay muchas causas posibles para este tipo de comportamiento - es posible que tenga interacción con el usuario deshabilitado para ello o la UIView, puede que está establecido Habilitado propiedad en NO o puede estar más allá de los lazos de la UIView (iOS automáticamente asume que si un toque está fuera del rectángulo de límites, falló el receptor).

Además, las tomas se ignoran si su alfa está configurada en 0.0.

Debe comprobar todo lo anterior.

+0

Gracias pete ... Ya lo había revisado y configuré la propiedad de habilitar el botón en sí, pero todavía no funciona ... hmmm ... ¿estoy en lo cierto al usar este código: [[tableView cellForRowAtIndexPath: indexPath] insertSubview: subSelectionView aboveSubview: self.view ];? – Aldee

+0

Si puede ver la subvista, entonces sí, el problema es que no recibe eventos. –

5

Se podría colocar esta subvista superior en la pila de vista. Esto se puede hacer fácilmente en Interface Builder.

enter image description here

Aquí Label - files se coloca sábana de Table View - all files. ¿No es eso lo que quieres?

+0

gracias Srikar, pero la etiqueta es generada por el código no en IB ... – Aldee

47

Hay un método bringSubViewToFront de la instancia de UIView. Puedes usar ese método

p. Ej.

UIVIew *yourSubView; 
[yourMainView addSubView:yourSubView]; 
[yourMainView bringSubviewToFront:yourSubView]; 

EDITAR

en su caso, debería ser igual,

[[tableView cellForRowAtIndexPath:indexPath] insertSubview:subSelectionView aboveSubview:self.view]; 
[[tableView cellForRowAtIndexPath:indexPath] bringSubviewToFront:subSelectionView]; 
+0

gracias Jennis, pero aún no funciona para mí ... ¿Puede usted – Aldee

+0

por favor publique su código fuente completo ¿cómo se crea una subvista y se agrega? –

+0

por favor vea la última parte ... gracias .. – Aldee

4

Uso - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index función de UIView junto con los NSArray de subvistas que puede obtener de subvistas de UIView propiedad ...

+0

¿puedo tener un poco de muestra Jhaliya? gracias .. – Aldee

5
[tableView bringSubviewToFront:subSelectionView]; 

o si el trabajo don`t tratar

[viewController.view bringSubviewToFront:subSelectionView]; 
+0

gracias moonkid, todavía no funciona ... Todavía estoy enfocado con la vista posterior ... hmm .. si voy a utilizar el método insertViewAtIndex: ¿cuál es la capa más alta? ¿es el mayor número/valor o el más bajo? – Aldee

+0

Puede obtener la vista de tope usando el objeto ventana Ventana * window = [[[UIApplication sharedApplication] windows] objectAtIndex: 0]; Than UIView * topView = [[subvistas de ventanas] lastObject]; – Moonkid

0

En Swift se puede hacer esto:

self.view.bringSubview(toFront: theViewToMoveToFront) 
Cuestiones relacionadas