2011-03-27 13 views
5

Simple: Una vista, presento un UIPopoverController en un CGRect usando presentPopoverFromRect ... y ni la flecha ni el marco de popover aparecen ni cerca de las coordenadas que pedí en el rect que pasé. ¿Alguna pista? He estado tratando de resolver esto por mi cuenta, pero me estoy dando por vencido. Aquí está el código:UIPopoverController: ¿Por qué mi popover no aparece donde quiero?

if(!myContentController){ 
    myContentController = [[MyContentController alloc] initWithNibName:myNibName bundle:[NSBundle mainBundle]]; 
    // This works pretty well. actually when i show the popover 
    // i see everything inside as it's supposed to. 
} 
if(!popover){ 
    popover = [[UIPopoverController alloc] initWithContentViewController:myContentController]; 
} 
else{ 
    [popover setContentController:myContentController]; 
} 
popover.delegate = self; 
CGPoint touchPointInView = [self touchPoint];//This is working fine too.I've been checking with NSLog. 
popover.ContentSize = myPopoverSize;//In this case {320,480} 
[popover presentPopoverFromRect:CGRectMake(touchPoint.x,touchPoint.y,myPopoverSize.width,myPopverSize.height) 
          inView:self.view 
     permittedArrowDirections:UIPopoverArrowDirectionAny 
         animated:YES]; 

¿Qué sucede después? el popover no muestra dónde debería estar. Si paso {0,0}, se muestra en el medio de la pantalla como si el tamaño de la vista fuera (768,512). Verifiqué todas las dimensiones de la vista y todas están bien, marco, límites, etc. ¿Alguien sabe qué estoy haciendo mal?

+1

¿Podría usted publicar código relacionado? – Jhaliya

+0

@Jhaliya lo siento, lo haré pronto. Pero es el procedimiento predeterminado, incluso en algún otro lugar del código, uso el mismo popover para mostrar algo y funciona. Quizás esté relacionado con eso. – jsicary

+0

OK, asegúrese de que está pasando la vista correcta para mostrar PopoverFromRect .. – Jhaliya

Respuesta

14

El CGRect le das a presentPopoverFromRect es el rect que se mostrará el popover siguiente a (no en). Dependiendo de la ubicación del rect, el popover aparecerá en un lado apropiado del rect especificado.

Si desea que el popover aparezca en un punto específico, proporcione un rect con el origen como punto y el tamaño como 1,1. Por lo que el CGRectMake en la línea presentPopoverFromRect debe ser:

CGRectMake(touchPoint.x,touchPoint.y,1,1) 

También asegúrese de que la TouchPoint es relativa a la inView (self.view en su caso).


Por cierto, hay algunos otros errores en el código (probablemente sólo errores tipográficos en la pregunta):

  • setContentController debe ser setContentViewController
  • popover.ContentSize debe ser popover.popoverContentSize
  • myPopverSize.height debe myPopoverSize.height (pero esto será sustituido por 1)
+0

Gracias por las correcciones. Tienes razón, son errores tipográficos. Los valores de touchPoint están bien, los he estado monitoreando con NSLog y están bien. Incluso al pasar (0,0) como punto de contacto, no se muestra donde pensé que debería estar, pero si el supuesto comportamiento es el que describiste, por supuesto, estoy haciendo algo mal. Te lo contaré pronto – jsicary

+0

Gracias, he pasado horas para solucionar este problema – dreampowder

1

En m y caso el motivo de este problema fue siguiente. También es posible, que su vista sea tableView. Entonces, cuando lo desplazas e intentas mostrar UIPopover en un rect en ese tableView, es posible que no se muestre. Utilicé esto:

[_popoverController presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
Cuestiones relacionadas