Ho un UITextField
che utilizza un numero personalizzato UIPickerView
nel suo inputView
per limitare l'utente a poche opzioni, funzioni analoghe a un elenco a discesa. Se utilizzato con una tastiera hardware collegata tramite bluetooth, la tastiera hardware sostituisce (e nasconde) il mio inputView
. L'associato inputAccessoryView
rimane, tuttavia. Quando si preme il pulsante "tastiera" sulla mia tastiera hardware (che normalmente visualizza la tastiera su schermo predefinita per una vaniglia UITextField
), tutto funziona come previsto. (Con ciò intendo che il mio inputView
è di nuovo visibile.) Nella versione precedente di iOS (ad esempio 7 e sotto), inputView
era sempre visibile quando chiamato.Tenere una tastiera hardware (bluetooth) da ignorare un inputView in iOS 8
ho temporaneamente risolto il problema impostando s' UIKeyboardType
UIKeyboardTypeDefault
-UIKeyboardTypeTwitter
, il UITextField
ma questo funziona solo mentre la tastiera hardware non viene riconosciuto come predefinito per quel particolare UIKeyboardType
. Il codice è pickerTextField.keyboardType = UIKeyboardTypeTwitter;
(vedi circa 2/3 del codice sotto). Dopo ulteriori test, questa soluzione parziale non è così utile come sembra.
Come posso visualizzare correttamente il mio inputView
in tutte le situazioni mentre si utilizza una tastiera hardware?
relativo codice frammento:
-(int)setUpPickerWheelAtXLoc:(int)xLoc andYLoc:(int)yLoc {
int qwidth = width - (xLoc - FORMBORDERLEFT);
// Set up inputView (pickerView) to replace the keyboard
self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(xLoc, yLoc, qwidth, height)];
self.pickerView.delegate = self;
self.pickerView.dataSource = self;
self.pickerTextField = [[UITextField alloc] initWithFrame:CGRectMake(xLoc, yLoc, qwidth, 32)];
self.pickerTextField.delegate = self;
pickerTextField.borderStyle = UITextBorderStyleRoundedRect;
pickerTextField.layer.borderWidth = 0.3f;
pickerTextField.layer.borderColor = [[UIColor blackColor] CGColor];
pickerTextField.textColor = [UIColor blackColor];
pickerTextField.font = [UIFont systemFontOfSize:XXLARGEFONTSIZE];
pickerTextField.placeholder = @"Tap to choose from list...";
// Add pickerView as inputView
pickerTextField.inputView = self.pickerView;
pickerTextField.keyboardType = UIKeyboardTypeTwitter; // Suggested temporary solution
// Setup inputAccessoryView (Done button)
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[doneButton addTarget:self action:@selector(pickerDoneButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[doneButton setTitle:@"Done" forState:UIControlStateNormal];
doneButton.titleLabel.font = [UIFont systemFontOfSize:XXLARGEFONTSIZE];
doneButton.frame = CGRectMake(0,0,100,44);
[doneButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight];
doneButton.contentEdgeInsets = UIEdgeInsetsMake(0,0,0,20);
doneButton.backgroundColor = [UIColor lightGrayColor];
pickerTextField.inputAccessoryView = doneButton;
return xLoc + qwidth;
}
Altre Informazioni: Dopo aver controllato pochi altri posti, mi hanno confermato che questo sta accadendo in almeno un prodotto Apple pure. (Nell'app/pagina "Crea nuovo ID Apple" su un iPhone 6 in 8.0.2, vedere la raccolta di date di nascita per mese e giorno)
Ho motivo di sospettare che questa sia la stessa causa di interferenza da tastiere personalizzate installate come Swype. Vedi http://stackoverflow.com/q/26020956/650365 – Maple
Vorrei anche trovare una soluzione per questo. Le visualizzazioni di input personalizzate dovrebbero essere visualizzate indipendentemente dalla presenza di una tastiera hardware. – albertamg