viernes, 1 de febrero de 2013

Asignar el Anchor de una PopOver a una UITableViewCell

Vamos a ver una forma de colocar el Anchor de un Segue de tipo Popover apuntando a una celda de una tabla dinámica. En el storyboard lo que tenemos es un prototipo de la celda, por lo que que si intentamos cablear el segue hacia ella, nos va a dar un error.

Así que os voy a contar como podemos solucionarlo. Se trata de crear un botón oculto que va a ser al que va a apuntar la ventana popover. Y moveremos su posición en función de la celda seleccionada.

Lo primero que haremos es crear el popover segue desde el ViewControler. Le asignaremos un Identifier, por ejemplo cellSegue.


Después añadiriremos a nuestra View un UIButon. Lo podemos colocar en cualquier sitio por qué va a tener su propiedad Hidden marcada, luego va a estar oculto. En el texto del botón voy a poner Anchor, aunque esto nos daría igual.


Y seleccionaremos el botón creado como Anchor del segue.


Ahora crearemos un outlet para el botón, que voy a llamar popOverAnchor:


@property (weak, nonatomic) IBOutlet UIButton *popOverAnchor;

En el @implementation colocaremos su synthesize:

@synthesize popOverAnchor = _popOverAnchor;


Deberemos implementar el método tableView:didSelectRowAtIndexPath: del UITableViewDelegate de esta forma:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{


//Recuperamos la celda que se ha seleccionado
        UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath];
        
//Creamos el CGRect al que va a apuntar el popover en función de la posición de la celda seleccionada
        CGRect rect = CGRectMake(tableViewCell.frame.origin.x + tableViewCell.frame.size.width/2, tableViewCell.center.y + tableView.frame.origin.y - tableView.contentOffset.y, 1, 1);
        
//Movemos el botón a esa posición
        self.popOverAnchor.frame = rect;

//Y para terminar llamamos al segue        
        [self performSegueWithIdentifier:@"cellSegue" sender:tableViewCell];

}

Y ya lo tenemos, como podéis ver, el botón se mueve al centro de la celda seleccionada y al ser el anchor de la ventana popover, conseguimos nuestro proposito.

@Fin