2014-09-20 7 views
6

Ho un UIDatePicker nella visualizzazione storyboard collegato a un IBOutlet nel file di intestazione.Aggiunta di un UIDatePicker come inputView a un campo di testo in iOS 8

Nel file di implementazione ho impostare alcune proprietà al selettore e quindi assegnare ai miei campi di testo:

[self.txtEndDate setInputView:self.picker]; 

Questo stava lavorando bene in iOS 7, ma con iOS 8 mi sta dando il seguente errore:

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

Qualche idea su come risolvere questo problema?

risposta

6

Dopo aver ricevuto un'e-mail da Apple Developer supporto tecnico, sembra che per aggiungere un UIDatePicker (o qualsiasi tastiera personalizzata per quello che ho capito) a viewController, non devi più aggiungerlo alla sua vista, ma lo aggiungi alla sua barra del titolo e poi lo connetti a IBOutlet.

Sta funzionando per me, anche se non funziona nel simulatore iPhone 5 (tutti gli altri sono ok) e stavo impazzendo.

Spero che questo possa essere di aiuto per altre persone con lo stesso problema.

2

La soluzione è quella di creare il codice UIPickerView in codice (rimuoverlo dallo Storyboard), assegnarlo al campo di inputView del campo di testo e recuperarlo da lì ogni volta che ne hai bisogno (invece di mantenere un riferimento ad esso). In pratica, questo significa:

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

Se in seguito ne ha bisogno, l'uso:

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

ho provato a farlo in questo modo , ma il selettore di date non appare quando i campi di testo diventano i primi soccorritori. Non capisco perché. – Aleph72

+0

Sì, risulta che non funziona più. È lo stesso problema descritto qui: http://stackoverflow.com/questions/24366437/add-uipickerview-in-uiactionsheet-from-ios-8-not-working – verybadalloc

+0

Questo assolutamente funziona! Non sono riuscito a far funzionare nulla finché non ho trovato questa risposta! Non ho implementato l'ultima parte della tua risposta però. Piuttosto, ho creato una proprietà di selezione (invece di ivar) e ho fatto riferimento ad essa quando necessario. Ecco il mio esempio di codice ben documentato. Spero che questo risparmi un sacco di tempo e mal di testa. https://stackoverflow.com/a/46047257/3634990 – jungledev

1

UIDatePicker non dovrebbe essere bambino di qualsiasi super-vista

Problema:

È necessario garantire che la vista che si assegnerà al inputView o inputAccessoryView non appartengono ad alcuna vista primaria. Forse quando crei queste viste da xib all'interno di un ViewController, per impostazione predefinita sono subviews di una superview.

Consigli Soluzione:

utilizzando il metodo removeFromSuperview per la vista si assegnare ai inputView o inputAccessoryView

vedi dettaglio in questo link

Error when adding input view to textfield iOS 8

Problemi correlati