2014-09-20 13 views
6

Mam UIDatePicker w moim widoku storyboard podłączony do IBOutlet w pliku nagłówka.Dodawanie UIDatePicker jako inputView do textField w iOS 8

W pliku wdrażania ustawić pewne właściwości do próbnika, a następnie przypisać je do moich pól tekstowych:

[self.txtEndDate setInputView:self.picker]; 

To działa dobrze w iOS 7, ale z iOS 8 to daje mi następujący błąd:

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

Każdy pomysł, jak to naprawić?

Odpowiedz

6

Po otrzymaniu e-maila od Apple Developer pomocy technicznej, wydaje się, że aby dodać UIDatePicker (lub dowolną niestandardową klawiaturę co zrozumiałem) do viewController, nie musisz już dodawać go do swojego widoku, ale dodajesz go do paska tytułu, a następnie łączysz go z IBOutlet.

Działa to dla mnie, nawet jeśli nie działa w symulatorze iPhone'a 5 (wszystkie inne są w porządku), a ja oszalałem.

Mam nadzieję, że może to być pomocne dla innych osób z tym samym problemem.

2

Rozwiązaniem jest zbudowanie kodu UIPickerView (usunięcie go ze Storyboard), przypisanie go do inputView pola tekstowego i pobranie go w dowolnym momencie (zamiast zachowania odniesienia do niego). Zasadniczo oznacza to:

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

Jeśli później potrzebne, zastosowanie:

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

starałem się zrobić to w ten sposób , ale selektor daty nie pojawi się, gdy pola tekstowe staną się pierwszą odpowiedzią. Nie rozumiem, dlaczego. – Aleph72

+0

Tak, okazuje się, że to już nie działa. Jest to ten sam problem, co opisany tutaj: http://stackoverflow.com/questions/24366437/add-uipickerview-inactionsheet-from-ios-8-not-working – verybadalloc

+0

To absolutnie działa! Nie udało mi się uzyskać niczego, dopóki nie znalazłem tej odpowiedzi! Jednak nie zaimplementowałem drugiej części twojej odpowiedzi. Zamiast tego utworzyłem właściwość próbnika (zamiast ivar) i odsyłałem ją w razie potrzeby. Oto mój dobrze udokumentowany przykład kodu. Mam nadzieję, że to uratuje komuś dużo czasu i bólu głowy. https://stackoverflow.com/a/46047257/3634990 – jungledev

1

UIDatePicker dziecko nie powinno być jakichkolwiek Super View

Problem:

Musisz upewnić się, że widok będzie można przypisać do inputView lub inputAccessoryView nie należą do dowolnego widoku macierzystego. Być może po utworzeniu tych widoków z Xib wewnątrz ViewController, domyślnie są one subviewsami z superview.

Rozwiązanie Porady:

stosując metodę removeFromSuperview dla widoku można przypisać do inputView lub inputAccessoryView

patrz szczegół w ten link

Error when adding input view to textfield iOS 8

Powiązane problemy