2014-09-20 3 views
6

Ich habe einen UIDatePicker in meiner Storyboardansicht verbunden mit einem IBOutlet in der Headerdatei.Hinzufügen eines UIDatePicker als Eingabeansicht zu einem TextField in iOS 8

In der Implementierungsdatei stellte ich einige Eigenschaften mit dem Picker und weisen Sie dann zu meinen Textfeldern:

[self.txtEndDate setInputView:self.picker]; 

Dies wurde in iOS 7, aber mit iOS 8 es gibt mir die folgenden Fehler adaequat:

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>' 

Haben Sie eine Idee, wie Sie das beheben können?

Antwort

6

Nachdem eine E-Mail von Apple Developer Technical Support empfängt, scheint es, dass eine UIDatePicker (oder eine benutzerdefinierte Tastatur hinzufügen für was ich verstanden habe) zu einem ViewController, Sie müssen es nicht mehr zu seiner Ansicht hinzufügen, aber Sie fügen es seiner Titelleiste hinzu und verbinden es dann mit dem IBOutlet.

Es funktioniert für mich, auch wenn es nicht funktioniert im iPhone 5 Simulator (alle anderen sind in Ordnung) und ich war verrückt.

Ich hoffe, dass dies für andere Menschen mit dem gleichen Problem hilfreich sein könnte.

Sie müssen sicherstellen, dass die Ansicht, die Sie inputView oder inputAccessoryView gehören nicht zu einer übergeordneten Ansicht zuweisen:

2

Die Lösung besteht darin, Ihre UIPickerView in Code zu erstellen (entfernen Sie es aus dem Storyboard), zuweisen Sie es in das Textfeld inputView, und abrufen Sie es von dort jederzeit, wenn Sie es brauchen (anstatt einen Verweis darauf). Im Grunde bedeutet dies:

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

Wenn Sie es später benötigen, verwenden Sie:

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

Ich habe versucht, es so zu tun , aber die Datumsauswahl erscheint nicht, wenn die Textfelder zum ersten Responder werden. Ich verstehe nicht warum. – Aleph72

+0

Ja, es stellt sich heraus, dass dies nicht mehr funktioniert. Es ist das gleiche Problem wie hier beschrieben: http://StackOverflow.com/Questions/24366437/add-uipickerview-in-uiactionsheet-from-ios-8-not-working – verybadalloc

+0

Dies funktioniert absolut! Ich konnte nichts zur Arbeit bringen, bis ich diese Antwort gefunden hatte! Ich habe den letzten Teil Ihrer Antwort jedoch nicht umgesetzt. Stattdessen habe ich eine Picker-Eigenschaft (anstelle von ivar) erstellt und bei Bedarf darauf Bezug genommen. Hier ist mein gut dokumentiertes Codebeispiel. Ich hoffe, das spart jemandem viel Zeit und Kopfschmerzen. https://stackoverflow.com/a/46047257/3634990 – jungledev

1

UIDatePicker sollte nicht

Problem Kind jeder super Aussicht sein. Wenn Sie diese Ansichten von Xib innerhalb eines ViewControllers erstellen, sind sie standardmäßig Unteransichten einer Superansicht. Tipps

Lösung:

Unter Verwendung der Methode removeFromSuperview für die Ansicht werden Sie inputView zuweisen oder inputAccessoryView

siehe Detail in diesem Link

Error when adding input view to textfield iOS 8

Verwandte Themen