ios - UIDatePicker en UIPopover
ipad uipopovercontroller (2)
Ahora, ya que ha etiquetado iPhone , se puede asumir claramente que está intentando usar UIPopoverController
en iPhone
pero UIPopoverController
solo está disponible para iPad
. Por lo tanto, se produce un bloqueo ya que el iPhone no reconoce ese controlador.
He buscado en todo el Internet (tal vez estoy exagerando un poco) un tutorial sobre cómo colocar un DatePicker en un UIPopover y mostrarlo en una aplicación de iPad. He intentado crear un controlador de vista, colocando el selector de fecha en el controlador de vista y luego:
self.popover = [[UIPopoverController alloc] initWithContentViewController:sa];
(sa es el nombre del controlador de vista que creé), pero esto no funciona, y la aplicación falla. ¿Alguien puede ayudar?
Intenta con el siguiente código. Funcionará bien:
C objetivo
- (IBAction)showDatePicker:(UIButton *)sender {
UIDatePicker *datePicker = [[UIDatePicker alloc]init];//Date picker
datePicker.frame = CGRectMake(0, 0, 320, 216);
datePicker.datePickerMode = UIDatePickerModeDateAndTime;
[datePicker setMinuteInterval:5];
[datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged];//need to implement this method in same class
UIView *popoverView = [[UIView alloc] init]; //view
popoverView.backgroundColor = [UIColor clearColor];
[popoverView addSubview:datePicker];
// here you can add tool bar with done and cancel buttons if required
UIViewController *popoverViewController = [[UIViewController alloc] init];
popoverViewController.view = datePicker;
popoverViewController.view.frame = CGRectMake(0, 0, 320, 216);
popoverViewController.modalPresentationStyle = UIModalPresentationPopover;
popoverViewController.preferredContentSize = CGSizeMake(320, 216);
popoverViewController.popoverPresentationController.sourceView = sender; // source button
popoverViewController.popoverPresentationController.sourceRect = sender.bounds; // source button bounds
//popoverViewController.popoverPresentationController.delegate = self;
[self presentViewController:popoverViewController animated:YES completion:nil];
}
- (void)dateChanged:(UIDatePicker *)datePicker {
NSLog(@"DATE :: %@", datePicker.date);
}
Swift3
@IBAction func showDatePicker(_ sender: UIButton) {
let datePicker = UIDatePicker()//Date picker
datePicker.frame = CGRect(x: 0, y: 0, width: 320, height: 216)
datePicker.datePickerMode = .dateAndTime
datePicker.minuteInterval = 5
datePicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged)
let popoverView = UIView()
popoverView.backgroundColor = UIColor.clear
popoverView.addSubview(datePicker)
// here you can add tool bar with done and cancel buttons if required
let popoverViewController = UIViewController()
popoverViewController.view = popoverView
popoverViewController.view.frame = CGRect(x: 0, y: 0, width: 320, height: 216)
popoverViewController.modalPresentationStyle = .popover
popoverViewController.preferredContentSize = CGSize(width: 320, height: 216)
popoverViewController.popoverPresentationController?.sourceView = sender // source button
popoverViewController.popoverPresentationController?.sourceRect = sender.bounds // source button bounds
self.present(popoverViewController, animated: true, completion: nil)
}
func dateChanged(_ datePicker: UIDatePicker) {
print("DATE :: /(datePicker.date)")
}