2014-09-30 6 views
7

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

+0

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

+0

Vorrei anche trovare una soluzione per questo. Le visualizzazioni di input personalizzate dovrebbero essere visualizzate indipendentemente dalla presenza di una tastiera hardware. – albertamg

risposta

0

Il problema è stato risolto da Apple nell'aggiornamento iOS 8.1.

+0

Non risolto. È un bug che iOS non nasconda l'inputView in 8.1. Dovrebbe essere nascosto come in 8.0 e 8.0.1 –

+0

@EthicalPaul C'è un po 'di conflitto di utilizzo qui. Da un lato, un inputView che funziona come una tastiera deve essere sovrascritto quando è collegata una tastiera hardware. Dall'altro lato, le visioni di input che non funzionano come tastiere (ad esempio, le immagini di selezione del mese di Apple in varie app) non devono essere nascoste. Fino a quando Input Engineering non aggiunge un flag per consentire allo sviluppatore di indicare quale sia il preferito, la correzione/bug 8.1 consente di accedere a tutte le funzionalità, con un compromesso di un po 'di fastidio sull'utilizzo del gruppo 1. (TL; DR - Non tutte le visualizzazioni di input sono equivalenti alle tastiere, ma alcune lo sono). – Maple