Crear PopOver sin flechas y centrado en UIViewController

Estoy intentando mostrar una PopOver en el centro del ipad en Orientación horizontal. Ahora puedo hacerlo con el código siguiente pero no tiene las Propiedades asociadas con el "popOverViewController" que está vinculado en el guión gráfico. Quiero que sea una vista en el guión gráfico para que pueda trabajar y editarlo. Además de poder cambiar el tamaño del mismo para que sea el 50% o el 75% de la vista completa de los iPads y ninguna flecha …

Por favor, todo ayudará. * Código actualizado …. ahora puede establecer el tamaño. Pero aún no ve el contenido "popOverViewController".

self.popOverViewController = [[PopOverViewController alloc]init]; self.popOver = [[UIPopoverController alloc] initWithContentViewController:self.popOverViewController]; CGSize size = CGSizeMake(400.0,300.0); [self.popOver setPopoverContentSize:size]; CGRect rect = CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, 1, 1); [self.popOver presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:YES]; 

Solo copie y pegue el código siguiente.

 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]; 

La razón por la que no puede ver ningún contenido es porque, al volver a crear de forma explícita un controller de vista que ya tiene conectado a una salida, el comstackdor asume que desea deshacer la basura del valor anterior y libera la instancia creada por el controller de vista IB. O bien, si este es un storyboard separado o XIB, entonces el inicializador correcto sería -initWithNibName:bundle: Simplemente omita / edita la primera línea, y suponiendo que los puntos de venta están conectados correctamente, deberías ver lo que has puesto en IB.

Bien. Entonces hice esto …

 popOverViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"popOver"]; 

Acabo de estar trabajando en esto, pero quería hacer tanto guión gráfico como sea posible, lo que cambia el enfoque un poco:

1) Seleccione el popover en el guión gráfico y desmarque las indicaciones hacia arriba / abajo / izquierda / derecha para deshacerse de las flechas.

Para centrarlo en la anulación de pantalla, prepárate para segue y haz algo como esto:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { UIStoryboardPopoverSegue* popover = (UIStoryboardPopoverSegue*)segue; CGFloat horizontalInset = (self.view.frame.size.width - popover.popoverController.popoverContentSize.width) / (CGFloat)2.0; CGFloat verticalInset = (self.view.frame.size.height - popover.popoverController.popoverContentSize.height) / (CGFloat)2.0; popover.popoverController.popoverLayoutMargins = UIEdgeInsetsMake( verticalInset, horizontalInset, verticalInset, horizontalInset); } 

En mi caso, también encontré que el radio de la esquina de segue popover no coincidía con mi layout, así que cambio el color de background para borrarlo para orderar eso, es decir, agréguelo al bloque anterior:

 popover.popoverController.backgroundColor = [UIColor clearColor]; 

2) En el controller de destino, busque el atributo 'Popover' y marque 'Usar tamaño explícito' y coloque el tamaño deseado para que aparezca en el modo popover.

Hacer que el color de background fuera claro casi funcionó para mí, pero ensució el background atenuado. La parte de la vista que estaba directamente detrás de la flecha era clara y el rest del background era gris. Así que cambié el color a lo que fuera el alférez atenuado.

  UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:newViewController]; popoverController.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.15];