UIDatePickerView 在 iOS 的弹出窗口中

UIDatePickerView In Popup in iOS

提问人:surendrasheoran 提问时间:7/15/2016 最后编辑:surendrasheoran 更新时间:7/18/2016 访问量:678

问:

尝试显示,就像它在 中显示的那样。我试图添加它,但无法添加。UIDatePickerViewdialog boxAndroidUIAlertView

有人试过这个吗?

iOS的 iPhone iOS5

评论

0赞 user3182143 7/15/2016
如果在警报框中单击确定按钮,是否需要打开datePicker?
0赞 surendrasheoran 7/15/2016
不,我的屏幕上有按钮。点击该按钮后,我需要 UIDatePicker 作为弹出窗口,例如 UIAlertView,我可以在其中选择日期。有我的问题吗?

答:

0赞 Payal Maniyar 7/15/2016 #1

AddSubview 在 iOS7 中不可用UIAlertView

该类旨在按原样使用,不支持子类化。 此类的视图层次结构是私有的,不得修改。UIAlertView

您应该使用 .代码如下:UIAlertViewcontoller

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

希望这对你有所帮助。

0赞 user3182143 7/15/2016 #2

在按钮操作中,我设置了 datePicker

ViewController.m的

#import "ViewController.h"

@interface ViewController ()
{
  UIDatePicker *datepicker;
}

@end

@implementation ViewController         



-(IBAction) showDatePicker:(id)sender
{
  UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"\n\n\n\n\n\n\n" message:nil preferredStyle:UIAlertControllerStyleAlert];
  datepicker = [[UIDatePicker alloc]init];  
  [datepicker setDatePickerMode:UIDatePickerModeDateAndTime];
  [datepicker setDatePickerMode:UIDatePickerModeDate];
  [datepicker addTarget:self action:@selector(getPickerValue:) forControlEvents:UIControlEventValueChanged];

  [alertController addAction:({
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"Done" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        NSLog(@"The selected or picked datePicker value is - %@",datepicker.date);
        txtfldGetDatePickerValue.text = [self getStringDateFromDate:datepicker.date];
    }];
    action;
})];

[alertController.view addSubview:datepicker];
[self presentViewController:alertController animated:YES completion:nil];
}

-(void)getPickerValue:(UIDatePicker *)pickerDate
{
  txtfldGetDatePickerValue.text = [self getStringDateFromDate:pickerDate.date];
}

-(NSString *)getStringDateFromDate:(NSDate *)pickerDate
{
  NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
  [formatter setDateFormat:@"dd/MM/yyyy"];
  return [formatter stringFromDate:pickerDate];
}

我尝试了很多解决方案,最后得到了输出。由于我没有正确给出答案,我想为您的问题提供最佳答案。我在谷歌上搜索了很多答案。甚至我创建了示例项目来实现这一点。我没有使用操作表和popoverpresentration视图控制器。简单地说,我使用了UIAlertViewController的编码。

UIDatePicker 到操作表一直被 Apple 劝阻

评论

0赞 surendrasheoran 7/15/2016
它将在特定位置显示 UIDatepicker,而不是像弹出窗口。
0赞 user3182143 7/15/2016
您是否需要为 iPhone 或 iPAd 实现此功能?
0赞 surendrasheoran 7/15/2016
在 iPhone 中。iPad 为此提供了 UIPopoverViewController。
0赞 Deepraj Chowrasia 7/15/2016 #3

这将起作用..查看代码。这将在 ios7 及更高版本中起作用

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Select Date" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
   UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(10, alert.bounds.size.height, 320, 216)];
[alert addSubview:picker];
alert.bounds = CGRectMake(0, 0, 320 + 20, alert.bounds.size.height + 216 + 20);
[alert setValue:picker forKey:@"accessoryView"];
[alert show];
0赞 Sagar Shirbhate 7/15/2016 #4

要在手机中显示弹出框,只需制作UIPopoverController的类别即可 法典:

//  UIPopoverController+iPhone.h
#import <UIKit/UIKit.h>

@interface UIPopoverController (iPhone)
+ (BOOL)_popoversDisabled;
@end
//  UIPopoverController+iPhone.m


#import "UIPopoverController+iPhone.h"

@implementation UIPopoverController (iPhone)
+ (BOOL)_popoversDisabled {
    return NO;
}
@end

这肯定会对你有所帮助。

评论

0赞 Sagar Shirbhate 7/15/2016
@surendrasheoran 只需导入要使用的类别