将UIDatePicker作为inputView添加到iOS 8中的textField

时间:2014-09-20 16:42:47

标签: ios8 uidatepicker

我的故事板视图中有一个UIDatePicker连接到头文件中的IBOutlet。

在实现文件中,我将一些属性设置为选择器,然后将其分配给我的textFields:

[self.txtEndDate setInputView:self.picker];

这在iOS 7中运行良好,但是对于iOS 8,它给了我以下错误:

Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x7c2d8800> should have parent view controller:<InserimentoDurata: 0x7aec2b10> but requested parent is:<UIInputWindowController: 0x7b92b400>'

有关如何解决这个问题的想法吗?

3 个答案:

答案 0 :(得分:6)

收到来自Apple开发者技术支持的电子邮件后,似乎要将一个UIDatePicker(或任何我自己理解的自定义键盘)添加到viewController,您不必再将其添加到其视图中,但是您将其添加到其标题栏,然后将其连接到IBOutlet。

它对我有用,即使它在iPhone 5模拟器中不起作用(所有其他都没问题)我也疯了。

我希望这对有同样问题的其他人有所帮助。

答案 1 :(得分:2)

解决方案是在代码中构建UIPickerView(从Storyboard中删除它),将其分配给textfield的inputView,并在需要时随时从中检索它(而不是保留对它的引用)。基本上,这意味着:

UIPickerView* picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 300, 320, 168)];
[picker setDataSource: self];
[picker setDelegate: self];
picker.showsSelectionIndicator = YES;
self.textField.inputView = picker;

如果您以后需要它,请使用:

UIPickerView* pickerView = (UIPickerView*) self.datePartySizeTextField.inputView;
[pickerView selectRow:1 inComponent:0 animated:NO];

答案 2 :(得分:1)

UIDatePicker不应该是任何超级视图的子代

<强>问题

您必须确保您将分配给inputView或inputAccessoryView的视图不属于任何父视图。也许当您在ViewController中从xib创建这些视图时,默认情况下它们是superview的子视图。

解决方案提示

使用removeFromSuperview方法为视图分配inputView或inputAccessoryView

请参阅此链接中的详细信息

Error when adding input view to textfield iOS 8