繁体   English   中英

如何在iOS7中向UIALertView添加UIDatePicker

[英]How to Add a UIDatePicker to UIALertView in iOS7

我在我的一个视图中实现了datepicker,方法是将datepicker添加到Alertview中。 现在在iOS 7中我无法在alertview上找到datepicker,当我搜索到时,我们无法在iOS7中向alertview添加任何内容。

我的要求是当我选择DOB文本字段时,我必须显示Datepickerview并修改日期,更改后的值将存储到文本字段中。

现在我的问题是如何在alertview上显示datepicker。

我尝试在视图上显示,但是当尝试从视图中删除数据选择器时它无法正常工作。

我知道这是一个较旧的问题,但我相信以下内容允许OP请求的内容,我认为不会违反Apple涉及AlertView层次结构更改的规则:

- (void)requestDateOfBirth
{
UIDatePicker *birthDatePicker;
UIAlertView *setBirthDate;
NSDateFormatter *birthDateFormatter;
UITextField *birthDateInput;
//create the alertview
setBirthDate = [[UIAlertView alloc] initWithTitle:@"Date of Birth:"
                                              message:nil
                                             delegate:self
                                    cancelButtonTitle:@"Cancel"
                                    otherButtonTitles:@"OK", nil];
setBirthDate.alertViewStyle = UIAlertViewStylePlainTextInput;

//create the datepicker
birthDatePicker = [[UIDatePicker alloc] init];
[birthDatePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged];
birthDatePicker.datePickerMode = UIDatePickerModeDate;    
birthDatePicker.date = [NSDate date];
//get the textfield provided in the plain text alertview
birthDateInput = [setBirthDate textFieldAtIndex:0];
//change the textfields inputView to the date picker
birthDateInput.inputView = birthDatePicker;
[birthDateInput setTextAlignment:NSTextAlignmentCenter];
//create a date formatter to suitably show the date
birthDateFormatter = [[NSDateFormatter alloc] init];
[birthDateFormatter setDateStyle:NSDateFormatterShortStyle];
//set the current date into the textfield
birthDateInput.text = [birthDateFormatter stringFromDate:[NSDate date]];
//show the alert view and activate the textfield
[setBirthDate show];
[birthDateInput becomeFirstResponder];
}

然后不要忘记处理日期选择器中的更改

- (void) dateChanged:(id)sender
{
NSDateFormatter *birthDateFormatter;
UIDatePicker *birthDatePicker = (UIDatePicker *)sender;

birthDateFormatter = [[NSDateFormatter alloc] init];
[birthDateFormatter setDateStyle:NSDateFormatterShortStyle];
birthDateInput.text = [birthDateFormatter stringFromDate:birthDatePicker.date];
}

我希望这有帮助

在iOS 7中,您可以使用

[alertView setValue:yourDataPicker forKey:@"accessoryView"];

完整的解释在这里

UIAlertView的层次结构是私有的,不应修改。

来自Apple文档

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

在iOS 6之前,您可以向UIAlertView子视图层次结构添加一些视图,但这似乎在iOS 7上不再起作用。自beta4发布以来,为iOS7宣布的contentView属性被制作为私有ivar,因此无法使用addSubview提醒视图。

UIView *_contentViewNeue;

有关这方面的更多信息,请参阅Apple dev论坛讨论 (您需要登录)

在这种情况下,您应该创建一个模仿UIAlertView的自定义视图,然后使用它来添加选择器视图。

希望有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM