2010-10-02 32 views
14

me gustaría saber para hacer una UIPopoverController sin flechas De hecho me gustaría para simular algo parecido a esto: Screenshot of the set-passcode screen from the iPad's System PreferencesUIPopoverController sin flechas?

Ver que

  • No hay ninguna flecha

  • Hay es un título que de alguna manera está dentro de un borde superior expandido del UIPopoverController y no dentro de él como en el UIPopoverController normal.

Asumo que esto no es realmente un objeto UIPopoverController pero agradecería consejos sobre cómo puedo hacer el mismo efecto (utilizando CoreGraphics -> especialmente el efecto degrade translúcida de la frontera excepcional 3D) y/o enlaces a algunas fuentes si alguien ha hecho esto antes.

Gracias de antemano.

Ignacio

EDIT:

Todavía estoy buscando para estas cosas y se dio cuenta de que incluso en aplicaciones de terceros se utiliza un ejemplo es: Twitterrific para el iPad como se ve en esta imagen. ¿Alguien por favor? Poner el título dentro de popovercontroller es feo. alt text

Respuesta

4

Aunque hay algunas dudas sobre si Apple va a aprobar aplicaciones que crean un popover sin flecha, es posible que desee echa un vistazo a este post regarding arrows y esto post regarding modal views.

+0

No creo que haya un problema si no se presentan flechas. Como el enlace que sugirió, la opción está disponible ¿verdad? ;) Pero todavía no entiendo cómo poner un título en el controlador popover como en las imágenes que se muestran. He probado la propiedad de título de UIViewController pero no funciona. – nacho4d

+0

Encontré la solución aquí: http://stackoverflow.com/questions/2617409/setting-the-title-of-a-uipopovercontroller – nacho4d

1

Para crear un popover con un título, necesita crear una vista separada como si fuera una ventana separada y luego cargar esa vista en el popover.

19

El método siguiente funciona bien para mí (incluya iOS7)

[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20) 
            inView:self.view 
        permittedArrowDirections:NULL 
            animated:YES]; 
+2

+1, pero para MonoTouch, use uint.MinValue en lugar de "NULL" para eliminar el flecha –

1

El borde superior es producido por la colocación de un controlador de navegación entre el popover y el controlador de vista presentada.

En otras palabras, el popover presenta un controlador de navegación y el controlador de vista raíz del controlador de navegación se establece en su controlador de vista. Esto produce la barra de título y le permite establecer el título con [self setTitle:@"My Title"] y agregar botones de navegación.

1

Puede agregar un título utilizando un UINavigationController y agregando UIViewControllers al controlador de navegación. Establezca el atributo 'título' del UIViewController para que aparezca el título.

Establecer la dirección de flecha en NULO, como algunos han sugerido, puede dar como resultado un comportamiento impredecible, ya que el método usa esta variable para descubrir cómo orientar la ventana emergente relativa al elemento o rectángulo del botón de barra.

Es mejor subclasificar UIPopoverBackgroundView y configurar los diversos métodos de retorno de flecha para devolver 0 para las flechas (iOS5 y superior solamente).Vea este ejemplo de cómo subclase esto correctamente:

http://blog.teamtreehouse.com/customizing-the-design-of-uipopovercontroller

ejemplo de implementación simple (MyCustomPopoverBGView es la subclase de UIPopoverBackgroundView en este ejemplo):

UIViewController *vCtrlr = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
vCtrlr.title = @"My Title"; 
self.navCtrlr = [[UINavigationController alloc] initWithRootViewController:vCtrlr]; 
self.popCtrlr = [[UIPopoverController alloc] initWithContentViewController:_navCtrlr]; 
_popCtrlr.popoverBackgroundViewClass = [MyCustomPopoverBGView class]; 
      [_popCtrlr presentPopoverFromRect:CGRectMake(0, 
                 0, 
                 320, 
                 150) 
             inView:self permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
0

Simplemente copia & pega el siguiente código

UIViewController *popovercontroller=[[UIViewController alloc] init]; 
UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(312,390, 400, 344)]; 
popoverView.backgroundColor=[UIColor whiteColor]; 

popovercontroller.contentSizeForViewInPopover=CGSizeMake(400, 300); 



UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 400, 0)]; 
[pickerView setTintColor:[UIColor blackColor]]; 
[pickerView addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged]; 

pickerView.datePickerMode = UIDatePickerModeDate; 
pickerView.hidden = NO; 
NSString *bs ; //= [NSString alloc]; 
// //NSDate *newDate = [NSData alloc]; 
bs = CurrentSelectedDate; 
if (bs.length >= 1) { 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ; 
    //  //[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
    //  [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
    [dateFormatter setDateFormat:@"dd-MMM-yyyy"]; 
    // NSDate *myDate = [dateFormatter dateFromString: txtText.text]; 
    pickerView.date = [dateFormatter dateFromString: CurrentSelectedDate]; 

} 
else 
{ 
    pickerView.date = [NSDate date]; 
} 
[popoverView addSubview:pickerView]; 



// pickerView.date = [dateFormatter dateFromString:txtText.text]; 
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 400, 44)]; 
pickerToolbar.barStyle = UIBarStyleDefault; 
pickerToolbar.barTintColor=[UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f]; 

[pickerToolbar sizeToFit]; 
self.navigationController.toolbar.barTintColor = [UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f]; 
NSMutableArray *barItems = [[NSMutableArray alloc] init]; 

UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[barItems addObject:flexSpace]; 

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)]; 
doneBtn.tintColor=[UIColor whiteColor]; 
[barItems addObject:doneBtn]; 

UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)]; 
cancelBtn.tintColor=[UIColor whiteColor]; 
[barItems addObject:cancelBtn]; 

[pickerToolbar setItems:barItems animated:YES]; 


[popoverView addSubview:pickerToolbar]; 
popovercontroller.view=popoverView; 

pickerViewPopup = [[UIPopoverController alloc] initWithContentViewController:popovercontroller]; 

[pickerViewPopup presentPopoverFromRect:CGRectMake(312, 212, 400, 344) inView:self.view permittedArrowDirections:0 animated:YES]; 
4

Pase 0 a permittedArrowDirections atributo.

[popoverController presentPopoverFromRect:YOUR_RECT 
            inView:self.view 
        permittedArrowDirections:0 
            animated:YES];