2012-09-01 13 views
9

Actualmente tengo una aplicación con dos controladores de vista. El primero es un controlador de vista con una vista de tabla incrustada que tiene celdas dinámicas. El segundo es un controlador de vista de tabla con celdas estáticas. Si agrego una transición de seleccionar una de las celdas de la tabla dinámica al controlador de vista de tabla estática (usando la configuración de estilo Push o Modal), puedo ver que la transición funciona como se esperaba. Sin embargo, cuando cambio el estilo de Popover me sale el siguiente error de compilación:Popover segue to static cell UITableView causa el error de compilación

Couldn't compile connection: <IBCocoaTouchOutletConnection:0x4004c75a0 <IBProxyObject: 0x400647960> => anchorView => <IBUITableViewCell: 0x400f58aa0>> 

alguien más ha topó con este tema, o ¿alguien sabe qué podría significar este mensaje de error? Parece extraño que esto está sucediendo en tiempo de compilación a menos que un controlador de vista tabla estática no está soportado en un Popover ...

Respuesta

15

me di cuenta de cómo hacer esto. No se puede conectarlo del guión, pero puede hacerlo mediante programación como esto:

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

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" 
               bundle:nil]; 
    UITableViewController *detailController = [sb instantiateViewControllerWithIdentifier:@"TableSettingDetails"]; 

    self.popoverController = [[UIPopoverController alloc] initWithContentViewController:detailController]; 

    self.popoverController.popoverContentSize = CGSizeMake(320, 416); 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [self.popoverController presentPopoverFromRect:cell.bounds inView:cell.contentView 
          permittedArrowDirections:UIPopoverArrowDirectionAny 
              animated:YES]; 
} 

Sólo asegúrese de que usted tiene una referencia a su popover en su controlador, de lo contrario se obtendrán de forma inmediata dispuesto - causando alguna otra excepciones interesantes.

+0

Por mucho que prefiera que esto suceda en el guión gráfico (IB) esto funcionó para mí, ¡gracias! – Joe

+0

¡Publicación muy útil! Gracias – Rahul

+0

upvoted como muy útil, pero ya no es válida en IOS 10 - He añadido el código correspondiente IOS 10 como una respuesta por separado, pero si quieres incorporarlo en la respuesta aceptada, @ lehn0058, adelante, y yo Eliminaré mi respuesta. – Grimxn

2

Tienes que elegir un punto de anclaje para que Popover que NO es la célula estática. Mi sugerencia es poner un UIButton configurado para ser invisible (tipo personalizado). Luego seleccione Popover Segue y arrastre la conexión Anchor a ese botón.

+0

El punto de anclaje para el popover es una de las celdas dinámicas. Al tocar esa celda, aparece el popover con la tabla de celdas estáticas. – lehn0058

+0

Veo que se agrega un botón a la vista principal y se establece que a medida que el ancla se deshace del error de compilación, pero entonces mi popover no apunta a la celda correcta en la tabla. Mover el botón a la celda provoca el mismo error de compilación nuevamente. – lehn0058

+0

En este momento, no puede anclar un popover a una celda de vista de tabla estática. –

0

A partir de iOS 10, la respuesta correcta y aceptada de @ lehn0058 ya no funciona. Aquí está su solución actualizada para iOS 10 ...

override func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) { 
    // *** Next line doesn't work with popover, only full screen detail 
    //self.performSegue(withIdentifier: "editRow", sender: self) 
    // Hence, do it by hand... 
    let sb = UIStoryboard(name: "Main", bundle: nil) 
    let detailVC: MyDetailViewController = sb.instantiateViewController(withIdentifier: "itemEditor") as! MyDetalViewController 
    detailVC.modalPresentationStyle = .popover 
    detailVC.popoverPresentationController?.sourceView = tableView.cellForRow(at: indexPath) 
    detailVC.detailItem = self.itemAtIndexPath(indexPath) 

    self.present(detailVC, animated: true, completion: {}) 
} 
Cuestiones relacionadas