如何在iOS8中的UIAlertController中添加UIDatePicker?

San*_*ush 4 uidatepicker uiactionsheet uipicker ios uialertcontroller

我正在开发一个我已经用iOS-7发布的项目.但是现在因为操作表出现问题所以我现在正在实现UIAlertController.以下是我用来显示带有UIPicker的UIAlertController的代码.

alertController = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];

        UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:alertAction];
        [alertController addAction:alertAction];
        [alertController addAction:alertAction];
        [alertController addAction:alertAction];
        [pickerToolbar setFrame:CGRectMake(0, 0, self.view.frame.size.width-20, 44)];
        [alertController.view addSubview:pickerToolbar];
        [alertController.view addSubview:picker];

        [alertController.view setBounds:CGRectMake(0, 0, self.view.frame.size.width, 485)];
        [self presentViewController:alertController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

但是我无法在其中添加datepicker.它与普通选择器不同,应用程序挂起.有关在UIAlertController中添加UIDatePicker的任何示例代码,请提供建议.提前致谢

Ric*_*ick 6

Apple一直不鼓励将UIDatePicker添加到操作表中.自iOS 7以来,Apple已经引入了内联日期选择器的使用(请参阅在日历应用程序中完成的操作).

如果您设法使用UIAlertController破解解决方法,它可能会在未来的iOS版本中再次破解.

  • 也许你应该给出内联日期选择器的例子 (2认同)

idr*_*dız 6

对于iOS9 + Swift代码,请点击此处.

将目标添加到日期按钮或其他视图.

     dateBtn.addTarget(self,action: #selector(YourViewController.dateSelect(_:)),forControlEvents: UIControlEvents.TouchDown) //my date button      


    func dateSelect(sender:UIButton)  {


    if (UI_USER_INTERFACE_IDIOM() == .Phone)
    {

        //init date picker
        self.datePicker = UIDatePicker(frame: CGRectMake(0, 0, self.view.frame.size.width,260))
        self.datePicker.datePickerMode = UIDatePickerMode.Date

        //add target
        self.datePicker.addTarget(self, action: #selector(YourViewController.dateSelected(_:)), forControlEvents: UIControlEvents.ValueChanged)

        //add to actionsheetview
        if(UIDevice.currentDevice().systemVersion >= "8.0")
        {

            let alertController = UIAlertController(title: "Date Selection", message:" " , preferredStyle: UIAlertControllerStyle.ActionSheet)

            alertController.view.addSubview(self.datePicker)//add subview

            let cancelAction = UIAlertAction(title: "Done", style: .Cancel) { (action) in

                self.dateSelected(self.datePicker)
                self.tableView.reloadData()

            }

            //add button to action sheet
            alertController.addAction(cancelAction)


            let height:NSLayoutConstraint = NSLayoutConstraint(item: alertController.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 300)
            alertController.view.addConstraint(height);

            self.presentViewController(alertController, animated: true, completion: nil)

        }


    }

}


//selected date func
func dateSelected(datePicker:UIDatePicker)
{

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle

    let currentDate = datePicker.date
    let day = currentDate.day()
    let month = currentDate.month()
    let year = currentDate.year()

    let date  = "\(day)/\(month)/\(year)"

    print(date)

}
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我有用

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIDatePicker *picker = [[UIDatePicker alloc] init];
[picker setDatePickerMode:UIDatePickerModeDate];
[alertController.view addSubview:picker];
[alertController addAction:({
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        NSLog(@"OK");
        NSLog(@"%@",picker.date);
    }];
    action;
})];
UIPopoverPresentationController *popoverController = alertController.popoverPresentationController;
popoverController.sourceView = sender;
popoverController.sourceRect = [sender bounds];
[self presentViewController:alertController  animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)