我的故事板视图中有一个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>'
有关如何解决这个问题的想法吗?
答案 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
请参阅此链接中的详细信息